数组是固定大小,确定类型的容器。
数组与其他种类的容器之间的区别有三个方面:效率、类型和保存基本类型的能力。
在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。
数组就是一个简单的线性序列,这使得元素的访问非常快。但是为这种速度多付出的代价是数组对象的大小被固定。并且在其生命周期中不可改变。
得益于泛型和自动装箱/拆箱的机制,集合也能够存储基本数据类型了,所以,数组仅仅是在效率上占有优势了。
数组的三种创建方式
int z[] = {1,2,3};
int[] x = new int[3];
int[] y = new int[] {1,2,3};
[]既可以位于类型后,也可以位于数组名后。
我更倾向于在已知长度且基本不变的情况下,优先选择使用数组,只有在长度无法确定的情况下,我才会选择ArrayList等。
通常,我们都是创建简单的一维数组,不过Java中,也可以实现二维数组和三维数组。
二维数组的创建和遍历
int[][] arr = new int[2][];
arr = new int[][]{{1,2,3},{4,5,6}};
for(int i = 0; i < arr.length;i++) {
int[] tempArr = arr[i];
for(int j = 0; j < tempArr.length;j++) {
System.out.print(tempArr[j] + " ");
}
System.out.println();
}
console:
1 2 3
4 5 6
注意:
实际上,我们也可以使用Java的API来输出二维数组
int[][] arr = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(arr));
console:
[[1, 2, 3], [4, 5, 6]]
三维数组的创建和遍历
int[][][] arr = new int[3][][];
arr = new int[][][] {
{
{ 1, 2, 3 },
{ 4, 5, 6 },
},
{
{ 7, 8, 9 },
{ 10, 11, 12 },
},
{
{ 13, 14, 15 },
{ 16, 17, 18 },
},
};
for (int i = 0; i < arr.length; i++) {
int[][] tempArr = arr[i];
for (int j = 0; j < tempArr.length; j++) {
int[] tempArr2 = tempArr[j];
for (int k = 0; k < tempArr2.length; k++) {
if (tempArr2[k] < 10) {
System.out.print("0" + tempArr2[k] + " ");
} else {
System.out.print(tempArr2[k] + " ");
}
}
System.out.println();
}
System.out.println();
}
console:
01 02 03
04 05 06
07 08 09
10 11 12
13 14 15
16 17 18
注意:
Java中还可以创建更多维度的数组,但实际上,我们实际开发中很少用到三维及更多维度的数组。
java.util.Arrays中提供了非常多的实用的静态方法,我们经常使用的包括排序,比较,查找等。
java.util.Arrays中很多方法都针对不同的数组进行了重载。
Arrays类中提供的sort()方法,用来对数组进行排序,内部实现是优化后的快速排序。
int arr[] = { 2, 5, 3, 7, 1, 4, 6, 9, 8 };
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
Arrays类中对equals()方法进行了重写,专门用来比较数组。
int arr[] = { 2, 5, 3, 7, 1, 4, 6, 9, 8 };
int arr2[] = { 8, 5, 3, 7, 1, 4, 6, 9, 2 };
System.out.println(Arrays.equals(arr, arr2));
Arrays类中,提供了binarySearch()方法,用来在排序后的数组中查找元素,内部实现是二分查找。
int arr[] = {2, 5, 3, 7, 1, 4, 6, 9, 8 };
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr, 3));
查找成功则会返回下标,否则返回一个负数。
Arrays类中,提供了fi11()方法,用来填充数组。
int arr[] = new int[5];
Arrays.fill(arr, 3);
System.out.println(Arrays.toString(arr));
数组这一章节中内容是比较少的,大部分内容是需要我们掌握Arrays类中方法的使用。不过,虽然我们可以通过sort(),binarySearch()等方法完成一些操作,但是我们还是要掌握其中的原理的。我之前有总结过几种常用的排序和查找算法,可以看【算法】排序和查找这篇文章。