基础说明
数组就是是存储同一种类型的集合,我们可以定义任何类型的数组
数组的声明和初始化
数组声明的形式有2种 int[] a; int a[],我们一般使用前一种
int[] a;
int b[];
数组是通过new来进行初始化的
// 数组的初始化使用 new ,并且指定数组大小
int[] a = new int[10];
// 上面语句就创建了大小为10的数组,里面可以存放10个int类型的值
上面的语句初始化之后并没有赋值,每个索引位置的值都默认为0。
还有一种更简单初始化数组的方式如下
// 数组还可以在初始化的时候直接赋值,使用{},
// 编译器会推断出数组的大小,下面就创建了b数组,大小为5
int[] b = {1,2,3,4,5};
上面这样初始化数组,数组每个位置的值都会和{}里面的值对应。
这里需要说明一点,数组初始化后具有默认值,数字类型默认为0,对象类型默认就是null,boolean类型默认是false
数组访问
数组访问是通过下标,从0开始,数组的长度-1结束
System.out.println(b[0]);
访问数组所有元素我们可以使用fori,也可以使用for each,如果要获取下标,那么就只能使用fori方式了
// 我们使用数组.length可以获取到数组的长度
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
for (int num : b) {
System.out.println(num);
}
多维数组和不规则数组
前面我们说的是一维数组,这里来介绍一下多维数组。我们先使用二维数组来举例,二维数组就相当于是有n个一维数组,如果是3*4的二维数组,那么就相当于是有3个一维的,大小为4的数组,总元素为12个。下面的代码就创建了一个二维数组
// 多维数组,一维就是[],二维就是[][],三维就是[][][],类推即可,
// 二维数组可以理解为有n个一维数组,三维数组可以理解为有n个二维数组,类推即可
// 二维数组一般用行列来表示
// 下面创建了一个4*3的数组
int[][] x = new int[4][3];
// 也可以使用{}进行初始化
/*
1,2,3,4
5,6,7,8
9,10,11,12
*/
int[][] nums = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
说完了多维数组,现在来说一下不规则数组,还是以二维数组为例,我们知道二维数组相当于n个一维数组,当然,java并没有要求所有一维数组长度是一样的,于是我们就可以在创建二维数组的时候不指定一维数组的长度,而是动态指定不一样的长度,下面就是一个例子
// 不规则数组,上面的二维数组每行都是固定大小的,我们再创建数组的时候也可以不进行初始化大小
// 下面就创建了一个大小为5*?的数组,
// 我们每行的大小可以各不相同,只需要每行都指向一个一维数组即可
int[][] nums = new int[5][];
for (int i = 0; i < nums.length; i++) {
nums[i] = new int[i];
}
上面的代码我们就创建了不规则的数组,下面我们来输出每一个一维数组的长度看一下
// 输出每一个一维数组长度
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i].length);
}
输出如下
0
1
2
3
4
不规则数组使用不多,一般都是规则的
数组常见操作
- 输出数组的所有元素
// 输出数组,我们直接输出数组并不会输入数组的值,而是会输出该数组的地址
System.out.println(b);
// 想要输出数组的值,我们可以使用Arrays.toString将数组转换成为字符串再输出
// 对于多维数组,我们需要使用Arrays.deepToString
System.out.println(Arrays.toString(b));
- 数组排序
// 数组排序,我们使用Arrays.sort就可以进行排序,默认(小->大)
Arrays.sort(a);
- 数组拷贝
// 数组拷贝,如果变量直接赋值,那么2个变量会引用同一个数组,也曾为浅拷贝,2者共享同一个数组
// 如果需要深拷贝,可以使用Arrays.copyOf的方法,深拷贝就会创建一个新的相同的对象
// 传入要拷贝的数组,第二个参数为新数组长度,如果小于传入数组的长度会进行截断,大于就会进行填充默认值
int[] copyA = Arrays.copyOf(a, a.length);
- 填充数组
// 填充数组,将数组里面的每个值都设置为val
Arrays.fill(a, 100);