(八)数组

1. 数组概述和一维数组

1.1 数组

数组是由多个类型相同的数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对数据进行管理。

1.2 数组组成

  • 数组名
  • 元素
  • 索引
  • 数组长度

1.3 数组特点

  • 数组是有序排列的
  • 数组本身是引用数据类型,数组元素可以是任意类型(基本数据类型和引用数据类型)
  • 创建一个数组会在内存中开辟一整块连续的空间
  • 数组的长度一确定就不可修改

1.4 数组分类

  • 按维数分,一维数组、二维数组...
  • 按数组元素数据类型分,基本数据类型元素的数组、引用数据类型元素的数组

1.5 一维数组的声明和初始化

① 声明

int[] ids; String[] names

② 初始化

  • 静态初始化:数组的初始化和数组元素的赋值同时进行

    int[] ids = new int[]{1000,1001,1002,1003};
    String[] names = new String[] {"A","B","C","D"};
    
  • 动态初始化:数组的初始化和数组元素的赋值分开进行

    int ids = new int[4];
    String[] names = new String[5];
    
  • 类型推断:特殊情况

    int[] ids = {1000, 1001, 1002};
    int ids[] = new int[4];
    
  • 数组一旦初始化,长度就不变。

1.6 调用修改数组元素

通过索引方式调用,索引由 0 至 array.length - 1

1.7 获取数组长度

属性:length array.length

1.8 数组元素的 默认初始化值

  • 数组元素为整型 :0
  • 数组元素为浮点型:0.0
  • 数组元素为 char 型:0\0\u0000表现为空格但不是空格
  • 数组元素为 boolean 型:false
  • 数组元素为引用数据类型( 比如String) 型:null

1.9 一维数组内存解析

​ 一维数组的首地址存放在 中,而栈中首地址指向的数组元素存放在

​ 声明数组的时候,首地址就已经在 中确定了,数组元素存放的位置已经需要的内存空间也都在 中确定。

​ 若重新声明一维数组,则数组首地址将改变,原数组元素成为 内存垃圾

1.10 foreach 循环

Java 提供 foreach 循环对数组进行遍历

语法:

for (elementType e: arrayName) {
      // some code.
}

举例:

int[] arr4 = new int[] {12, 31, 23, 25};
for (int e: arr4) {
        System.out.println(e);
}

2. 二维数组和多维数组

2.1 二维数组的理解

​ 一个数组作为另一个数组的元素而存在。

​ 其实,从数组底层的运行机制来看,并没有多维数组。

2.2 二维数组的声明和初始化

  • 静态初始化
      int[][] arr1 = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9} };
    
  • 动态初始化1
    String[][] arr2 = new String[3][4];
    
  • 动态初始化2
    String[][] arr3 = new String[3][];
    
  • 非标准形式
    String[] arr4[] = new String[3][4];
    String arr5[][] = new String[3][4];
    
  • 错误示范
    int[][] arr6 = new int[][3];
    String[3][4] arr7 = new String[][];
    int[][] arr8 = new int[3][3]{ {1,2,3}, {4,5,6}, {7,8,9} };
    

2.3 二维数组的调用

String[][] arr9 = new String[3][];
arr1[2] = new String[4]; // 在第3行定义了一个长度为4的数组
System.out.println(arr1[2][2]); //null

2.4 获取二维数组的长度

int[][] arr10 = new int[][]{ {1,2}, {3,4,5,6}, {7,8,9} };
System.out.println(arr10.length); // 3
System.out.println(arr10[0].length); // 2
System.out.println(arr10[1].length); // 4

2.5 遍历二维数组

for (int i = 0;i < arr11.length;i+=) {
        for (int j = 0;j < arr11[i].length;j++) {
                System.out.print(arr11[i][j] + "\t");
        }
        System.out.println();
}

2.6 二维数组的初始化值

  • 规定

    二维数组分为外层数组的元素,内层数组的元素

    int[][] arr = new int[i][j];
    

    外层元素:arr[i]

    内层元素:arr[i][j]

  • 默认初始化值

    • 初始化方式一:int[][] arr = new int[i][j];

      外层元素初始化值:地址值

      内层元素初始化值:与一维数组初始化情况同

    • 初始化方式二:int[][] arr = new int[i][];

      外层元素初始化值:null

      内层元素:外层不指向任何数组,不能调用,否则报错

2.7 二维数组的内存分析

​ 参考一维数组内存分析