Java知识点小结1:数组

注:本文是对《疯狂Java面试讲义》的小结。

在这里插入图片描述

数组的创建和初始化

  • 方式1(动态初始化):
        int[] arr1 = new int[3];

注意:动态初始化所创建的数组,其元素都有初始值(0、false、null等)。

  • 方式2(静态初始化):
        int[] arr2 = new int[] {
    
    111, 222, 333};
  • 方式2的变形:
        int[] arr2 = {
    
    111, 222, 333};

方式1和方式2不能混用。

创建数组对象时,必须指定长度,可以显式(方式1)或隐式(方式2)指定。

        // 创建数组对象时,必须指定长度
        int[] arr1 = new int[]; // 编译错误

数组对象创建后,其内存空间和数组长度都是不可变的(JavaScript的数组长度是动态可变的)。

使用 arr1.length 来获取数组长度(注意不要加括号)。

数组的长度可以是0:

        int[] arr1 = new int[0];
        int[] arr2 = new int[] {
    
    };

数组可以为空:

        int[] arr1 = null;

我们知道,Java对象是引用类型。 new 所创建的对象是在内存堆里创建的。数组对象也是 new 出来的,和其它Java对象并无本质区别。比如:

        arr1 = new int[3]; // arr1引用一个数组对象
        arr1 = new int[4]; // arr1引用另一个数组对象
        arr2 = arr1; // arr2和arr1指向同一个数组对象

Arrays类

可用 Arrays 类来操作数组,比如:

  • Arrays.sort(arr1) :排序
  • Arrays.stream(arr1) :获取流
  • Arrays.asList(arr1) :把数组转换为List,反过来是 list.toArray()
  • Arrays.toString(arr1) :把数组转换为一个字符串,方便打印,比如 [1, 2, 3, 4, 5]
  • Arrays.fill(arr1, 8) :把数组里的每个元素都赋值

多维数组

多维数组的本质是一维数组,其中的每个元素又是一个数组。

也就是说,有1个高维数组对象,和N个低维数组对象。

比如:

        int[][] arr3 = new int[3][5];

arr3 是一个长度为3的数组,其中每个元素是一个长度为5的数组。

        System.out.println(arr3.length); // 3
        System.out.println(arr3[0].length); // 5

注意,高维在左边,低维在右边。

对于多维数组中的高维来说,数组中每个元素又是一个数组(低维数组),每个低维数组的长度可以各不相同(甚至可以不初始化)。

看下面多维数组的例子:

  • 例1:
        int[][] arr4 = new int[3][5]; // 高维数组的长度为3,低维数组的长度为5
        arr4[2] = new int[6]; // 只要高维数组的每个元素是int[]就OK,长度不限
  • 例2:
        int[][] arr5 = new int[3][]; //高维数组的长度为3,低维数组对象并没有被创建
        arr5[0] = new int[5]; //创建低维数组对象
        arr5[1] = new int[6]; //创建低维数组对象
  • 例3:
        // 高维数组的长度为2,低维数组的长度为3和4
        int[][] arr6 = new int[][] {
    
    {
    
    111, 222, 333}, {
    
    444, 555, 666, 777}};
  • 例4:
        // 高维数组的长度为2,低维数组的长度为0
        int[][] arr7 = new int[][] {
    
    {
    
    }, {
    
    }};
  • 例5:
        // 高维数组的长度为3,前两个低维数组为空,最后一个低维数组长度为0
       int[][] arr8 = new int[][] {
    
    null, null, {
    
    }};

下面是一些错误的例子:

  • 例1:
        // 创建数组对象时,必须指定长度
        // (对于多维数组,只需指定最高维的长度,低维数组对象是高维数组的元素,可以先不创建)
        int[][] arr9 = new int[][]; // 编译错误
  • 例2:
        // 创建数组对象时,必须指定长度
        int[][] arr10 = new int[][2]; // 编译错误
  • 例3:
        // 两种初始化方式不能混用
        int[][] arr11 = new int[2][3] {
    
    {
    
    111, 222, 333}, {
    
    444, 555, 666}}; // 编译错误