chapter16 -- 数组

基本内容

  • 数组
  • 多维数组
  • 常用功能

1 数组

数组是固定大小,确定类型的容器。

数组与其他种类的容器之间的区别有三个方面:效率、类型和保存基本类型的能力。
在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。
数组就是一个简单的线性序列,这使得元素的访问非常快。但是为这种速度多付出的代价是数组对象的大小被固定。并且在其生命周期中不可改变。

得益于泛型和自动装箱/拆箱的机制,集合也能够存储基本数据类型了,所以,数组仅仅是在效率上占有优势了。

数组的三种创建方式

int z[] = {1,2,3};

int[] x = new int[3];

int[] y = new int[] {1,2,3};

[]既可以位于类型后,也可以位于数组名后。

我更倾向于在已知长度且基本不变的情况下,优先选择使用数组,只有在长度无法确定的情况下,我才会选择ArrayList等。

2 多维数组

通常,我们都是创建简单的一维数组,不过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中还可以创建更多维度的数组,但实际上,我们实际开发中很少用到三维及更多维度的数组。

3 常用功能

java.util.Arrays中提供了非常多的实用的静态方法,我们经常使用的包括排序,比较,查找等。
java.util.Arrays中很多方法都针对不同的数组进行了重载。

3.1 排序

Arrays类中提供的sort()方法,用来对数组进行排序,内部实现是优化后的快速排序。

int arr[] = { 2, 5, 3, 7, 1, 4, 6, 9, 8 };
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

3.2 比较

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));

3.3 查找

Arrays类中,提供了binarySearch()方法,用来在排序后的数组中查找元素,内部实现是二分查找。

int arr[] = {2, 5, 3, 7, 1, 4, 6, 9, 8 };
Arrays.sort(arr);
System.out.println(Arrays.binarySearch(arr, 3));

查找成功则会返回下标,否则返回一个负数。

3.4填充

Arrays类中,提供了fi11()方法,用来填充数组。

int arr[] = new int[5];
Arrays.fill(arr, 3);
System.out.println(Arrays.toString(arr));

数组这一章节中内容是比较少的,大部分内容是需要我们掌握Arrays类中方法的使用。不过,虽然我们可以通过sort(),binarySearch()等方法完成一些操作,但是我们还是要掌握其中的原理的。我之前有总结过几种常用的排序和查找算法,可以看【算法】排序和查找这篇文章。


欢迎关注个人公众号,搜索:公子照谏或者QCzhaojian
也可以通过扫描二维码关注。
chapter16 -- 数组_第1张图片

你可能感兴趣的:(《Thinking,in,Java》读书笔记,java)