今天的博客主题
Java常用类 ——》Java数组
什么是数组
数组是数据结构之一,基本上所有的编程语言都直接引用了数组。
让大家误以为数组是编程语言提供的一种数据类型,其实不是。
数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来唯一确定数组中的元素。
根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。
简单说数组是用来存储指定大小的同类型数据的有序集合。
数组中的每一个数据称它为元素,可以通过下标(索引)来获取。
数组的特点
1)数组的长度是固定的,一旦被创建就,长度无法改变。
2)元素类型必须一致。只要Java支持的类型都OK。
3)数组的元素在堆内存中被分配,而且是连续的内存。
4)数组的每个元素都有序号,从0开始,称为下标、索引、角标
5)使用new关键字对数组进行内存的分配。每个元素都会被赋予默认值。
6)数组属于引用数据类型。
数组的优缺点
优点
1)可以存储若干个元素的值
2)随机访问效率高(根据下标查询)
3)搜索效率较高(可使用折半方法)
4)
缺点
1)长度固定不能调整,存储效率低
2)数组元素只能是一种数据类型。
3)对数组元素做删除和插入效率低,需要移动数据。
4)
数组的定义
数组类型[] 数组名 = new 数组类型[数组长度];
或者
数组类型[] 数组名 = {元素1,元素2,元素3,.....,元素N};
中括号[]代表数组。
一维数组
一维数组就是数组的元素直接就是数据。
数组有动态数组和静态数组。
动态数组:初始化数组的时候只指定数组长度,系统为数组分配元素。即通过索引设置内容。
静态数组:初始化数组的时候指定元素,有系统决定数组的长度。
一维数组的定义
// 静态数组初始化方式
int[] arr = new int[]{1,2,3,4,5};
int[] arr1 = {1,2,3,4,5};
String[] array1 = {"李四","张三","王五"};
String[] array2 = new String[]{"邓超","李晨","岳云鹏"};
// 动态数组初始化方式,必须指定数组长度[5]
int[] arri = new int[5];
一维数组的操作
public static void main(String ages[]) {
// 初始化一个静态一维数组
int[] arr = {3,2,4,5,6,1};
System.out.println("获得数组长度:" + arr.length);
System.out.println("获得数组第一个元素:" + arr[0]);
// 遍历数组,取出数组里的每个元素
for (int i = 0; i < arr.length; i++) {
System.out.println("数组第"+i+"个元素:" + arr[i]);
}
// 更改数组某个下标的元素
arr[1] = 7;
// 将数组排序,通过Java提供操作数组的API来实现
Arrays.sort(arr);
// 数组转字符串
String str = Arrays.toString(arr);
System.out.println(str);
// 数组转List集合。注意一哈,基本数据类型的数组不可以转成List
String[] strArr = new String[] {"张三","赵四","王五","李六","岳云鹏"};
List<String> asList = Arrays.asList(strArr);
// 校验数组是否包含某个值
if (Arrays.asList(strArr).contains("岳云鹏")) {
System.out.println("有岳云鹏");
}
// 动态数组赋值
String[] arri = new String[3];
for (int i = 0; i < arri.length; i++) {
arri[i] = "HelloWorld:" + i;
}
System.out.println("动态数组赋值完之后的数组:" + Arrays.toString(arri));
// 数组去重,利用set的特性
int[] arr1 = {3,2,4,5,6,1,3,1,6,6,4,3,7,2};
Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < arr1.length; i++) {
set.add(arr1[i]);
}
System.out.println("arr1数组去重之后:" + set);
// 获取数组最大值和最小值
int[] arr2 = {3,2,4,5,6,1};
int max = arr2[0];
for (int i = 0; i < arr2.length; i++) {
if(arr2[i] > max) {
max = arr2[i];
}
}
System.out.println("arr2数组最大值:" + max);
// 最小值自己动手试试
}
==================》输出
获得数组长度:6
获得数组第一个元素:3
数组第0个元素:3
数组第1个元素:2
数组第2个元素:4
数组第3个元素:5
数组第4个元素:6
数组第5个元素:1
[1, 3, 4, 5, 6, 7]
有岳云鹏
动态数组赋值完之后的数组:[HelloWorld:0, HelloWorld:1, HelloWorld:2]
arr1数组去重之后:[1, 2, 3, 4, 5, 6, 7]
arr2数组最大值:6
数组用起来很方便,操作简单。这里只是列举一些对数组的操作。。
比如要做两个数组的合并,学会百度谷歌,找例子去写main方法运行,看结果是不是自己想要的。
二维数组
二维数组就是数组里套数组。
数据类型 [ ][ ] 数组名 = new 数据类型[m][n]
数据类型 [ ][ ] 数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};
二维数组的定义
// 声明一个静态二位数组
int[][] arr = {{2,3,1},{5,4,6},{9,7,8},{10,12}};
// 声明一个动态二位数组
int[][] arr1 = new int[3][2];
二维数组的操作
就把二维数组当做一维数组来操作就行。
public static void main(String ages[]) {
// 初始化一个静态二维数组
int[][] arr = {{2,3,1},{5,4,6},{9,7,8},{0}};
System.out.println("二维数组的长度:" + arr.length);
System.out.println("二维数组里的第一个数组长度:" + arr[0].length);
// 遍历这个二维数组
for (int i = 0; i < arr.length; i++) {
int[] arri = arr[i];
for (int j = 0; j < arri.length; j++) {
System.out.println("静态二维数组里的第" + i + "个数组里的第"+j+"个元素是:" + arri[j]);
}
}
// 声明一个动态二维数组
int[][] arr1 = new int[3][2];
// 动态为二维数组赋值
for (int i = 0; i < arr1.length; i++) {
int[] arri = arr1[i];
for (int j = 0; j < arri.length; j++) {
arri[j] = j + 90;
if(j == arri.length) {
arr1[i] = arri;
}
}
}
// 遍历出来这个动态二维数组里的值
for (int i = 0; i < arr1.length; i++) {
int[] arri = arr1[i];
for (int j = 0; j < arri.length; j++) {
System.out.println("动态二维数组里的第" + i + "个数组里的第"+j+"个元素是:" + arri[j]);
}
}
}
说了一维数组,二维数组。那有没有三维数组呢?
其实是有的,只不过是除了一维数组之外其他的都被称之为多维数组。
一般没有特殊的指定在说数组的时候,都是说的一维数组。
三维数组那就是有三个[][][],几维就是有几个[]。
在那遍历多维数组的时候,几个[]就套几个fori循环,来遍历取值或赋值。
都是些常规操作,等说数据结构,好好盘盘它...