二维数组:
-
二维数组的元素个数 = 二维数组中一维数组的个数 =
arr.length
; -
二维数组的每个元素是一维数组,所以如果需要得到每个一维数组中的元素,还需要再遍历一维数组;
-
arr[i][j]
表示:二维数组的第i+1
个一维数组的第j+1
个元素;
二维数组的初始化:
1.静态初始化
定义数组并同时为数组中的所有元素赋值:数据类型[][] 数组名 = {{值1, 值2, ..}, {值1, 值2, ..}, {值1, 值2, ..}};
举例:int[][] arr = {{1, 1, 1}, {8, 8, 9}, {10}};
注意:二维数组的每个元素必须是一维数组,不允许是其他数据类型;每个一维数组中的元素个数可以相等或不相等。上例中,第1个一维数组有 3 个元素,第2个一维数组有 3 个元素,而第三个一维数组只有 1 个元素。
int[][] arr = {{1, 1, 1}, {8, 8, 9}, {10}}; // 遍历二维数组中的每个元素(一维数组) for(int i = 0; i < arr.length; i++) { // 1. arr[i] 表示:二维数组的第 i+1 个一维数组。比如 arr[0]:二维数组的第一个一维数组 // 2. arr[i].length 得到对应的每个一维数组的长度 for(int j = 0; j < arr[i].length; j++) { // 输出二维数组中的一维数组中的每一个元素 System.out.print(arr[i][j] + " "); } System.out.println();// 换行 }
2.动态初始化:
第一种方式(列数确定)
基本语法:
先定义数组:数据类型[][] 数组名 = new 数据类型[数组大小][数组大小];
举例: int arr[][] = new int[2][3];
再给一维数组中的每个元素赋值,若不赋值,则为定义的数据类型的默认值。
这种初始化方式在声明二维数组的同时开辟了其所需要的堆内存空间,这种方式创建出的每一个一维数组的空间都是一样的(即二维数组的列数是一样的)。
// 定义一个二维数组,同时为数组开辟内存空间,此时二维数组的行数为3,列数为2。也就是我们所说的列数相同 int[][] arr = new int[3][2]; // 然后再遍历所有的一维数组,给其中的每个元素赋值。省略...
第二种方式(列数确定)
基本语法:
先声明:数据类型[][] 数组名;。
再定义(开辟空间):数组名 = new 数据类型[数组大小][数组大小];。此时每个一维数组的内存空间都已经开辟。
最后给一维数组中的每个元素赋值,若不赋值,则为定义的数据类型的默认值。
第二种方式其实是和第一种方式大同小异的。第一种方式是在声明的同时定义;而第二中是先声明数组,后面需要用到的时候再定义。
int[][] arr;
arr = new int[3][2];
// 先声明一个二维数组 int[][] arr; // 再为数组开辟内存空间,此时二维数组的行数为3,列数为2。也就是我们所说的列数相同 arr = new int[3][2]; // 最后再遍历所有的一维数组,给其中的每个元素赋值。省略...
2.2.3 第三种方式(列数不确定)
基本语法:
先声明:数据类型[][] 数组名;。
再定义(开辟空间):数组名 = new 数据类型[数组大小][];。 注意:此时所有的一维数组都未开辟堆内存空间。
遍历二维数组,给一维数组开辟堆内存空间,此时给每个一维数组开辟的内存空间可以不相等(也就是说二维数组的列数是不一样的)。
最后给一维数组中的每个元素赋值。若不赋值,则为定义的数据类型的默认值。
// 定义二维数组。此时所有的一维数组还没有分配内存空间;arr[i]的地址为null; int[][] arr = new int[3][]; // 遍历二维数组,给每个一维数据开辟内存空间。这种方式会使得每个一维数组的大小可以不一样 for (int i = 0; i < arr.length; i++) { // 给每个一维数组开辟空间,若没有这一步,一维数组的内存空间就是 null; arr[i] = new int[i + 1]; } // 最后再遍历所有的一维数组,给其中的每个元素赋值。省略...
三:二维数组使用细节和注意事项
一维数组的声明方式有: int[] x 或者 int x[]。
二维数组的声明方式有: int[][] arr 或者 int[] arr[] 或者 int arr[][]。
二维数组实际上是由多个一维数组构成的,它的各个一维数组的内存大小可以相同,也可以不相同。
比如: map[][] 是 一个二维数组, int[][] map = {{1, 2}, {3, 4, 5}};其中,map[0] 是一个含有2个元素的一维数组 ,map[1] 是一个含有3个元素的一维数组,因此, map[][] 也称为 “列数不等的二维数组”。