二维数组可以理解为数组里嵌套着数组。
之前学习的数组就是一维数组,一维数组的定义:
java
// 静态初始化
int[] arr1 = new int[]{1, 2, 3};
int[] arr2 = {1, 2, 3};
// 动态初始化
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
二维数组类似:
1.二维数组的初始化
java
int[][] arr2 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 简写
int[][] arr3 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
也可以把它想成一个表格,它由行和列组成,移动下数据的位置:
java
int[][] arr3 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
而且Java 的二维数组是"不规则"的,这表示每一行的长度可以不同。
2.获取数组元素
java
int[][] arr3 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 第一个数组,也就是{1,2,3}
System.out.println(arr3[0]);
// 第一个数组第一个元素,也就是1
System.out.println(arr3[0][0]);
// 第三个数组第三个元素,9
System.out.println(arr3[2][2]);
所以,二维数组里,arr[a][b],第一个a表示第几个数组,第二个b表示这个数组里第几个元素。
3.遍历数组
java
public class Main {
public static void main(String[] args) {
int[][] arr2 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 遍历二维数组
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j] + " ");
}
}
}
}
4.数组的长度
sout(arr.length),二维数组的长度,表示里面有多少个一维数组
sout(arr[0].length)表示第一个一维数组里有多少个元素
5.二维数组的特殊情况
特殊情况一:
int[] [] arr = new int[2] []; //二维数组没有给一维数组里写入元素
int[] arr1 = {11,22};
int[] arr2 = {44,55,66};
arr[0] = arr1; //把arr1地址给了arr[0]
arr[1] = arr2; //把arr2地址给了arr[1]
特殊情况二:
int[] [] arr = new int[2] [3];
int[] arr1 = {11,22};
int[] arr2 = {44,55,66};
arr[0] = arr1; //arr1地址值给了arr[0],原先的地址被覆盖了
arr[1] = arr2; //arr2地址值给了arr[1],原先的地址被覆盖了