Java 之 多維陣列(二維陣列)
一、多維陣列
Java 語言裡提供了支援多維陣列的語法。
如果說可以把一維陣列當成幾何中的線性圖形,那麼二維陣列就相當於是一個表格,類似於一個 Excel表格。
以二維陣列來討論,可以看成一維陣列array1 中又作為另一個一維陣列 array2 的元素而存在的。
二、二維陣列宣告與初始化
1、格式1:動態初始化
語法格式:
int[][] arr = new int[3][2];
定義了一個名稱為 arr 的二維陣列,二維陣列中有3個一維陣列,每一個一維陣列中有2個元素,一維陣列的名稱分別為 arr[0],arr[1], arr[2]
給第一個一維陣列下標為1賦值為78的寫法是:arr[0][1] = 78;
2、格式2:動態初始化
int[][] arr = new int[3][2];
二維陣列中有3個一維陣列,每個一維陣列都是預設初始化值 null。(注意:區別與格式1)
可以對這個三個一維陣列分別進行初始化。
arr[0]=new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
注意: int[][] arr = new int[][3]; 是非法的,即第一個[]中必須有值。
3、格式3:靜態初始化
語法格式:
int[][] arr = new int[][]{{3, 8, 2}, {2, 7}, {1, 2, 3, 4}};
定義一個名稱為 arr 的二維陣列,二維陣列中有三個一維陣列,每一個一維陣列中具體元素也都初始化了。
第三個一維陣列的長度表示方式: arr[2].length;
注意:特殊寫法情況
int[] x,y[]: x是一維陣列,y 是二維陣列
Java 中多維陣列不必都是規則矩陣形式,比如上面的每個一維陣列的長度各部相同。
4、根據型別推斷省略格式
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
三、二維陣列的長度和訪問
1、長度
由於二維陣列並不是規則的矩陣,其中的長度也不是同一的。
可以使用陣列的整個外層的長度,然後再根據下標一次來獲取每個內部一維陣列的長度。
Demo:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4
2、訪問
訪問二維陣列中某一個元素時,需要使用兩個索引來指定元素唯一的位置。
Demo:
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
String[][] arr2 = new String[3][2];
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
四、遍歷二維陣列
使用二維陣列常見的就是遍歷陣列,介紹兩種遍歷陣列的方法。
先來學習一下各種表示方法:
表示二維陣列的行數: 二維陣列名.length
表示一行: 二維陣列名[行下標] (行下標的範圍:[0,二維陣列總行數 - 1])
表示每一行的列數: 二維陣列名[行下標].length
表示具體的一個數據: 二維陣列名[行下標][列下標] (列下標的範圍:[0,該行總列數 - 1])
1、使用 for 迴圈遍歷
2、使用 foreach 迴圈遍歷
Demo:
int array[][] = new int[3][4]; //建立一個3行4列的陣列,並且裡面值都為預設值
// 使用 for 迴圈
for(int i=0;i<array.length;i++) { // 第一個迴圈,迴圈每一行
for (int j=0;j<array[i].length;j++) { //第二個迴圈,迴圈每行的每一列
System.out.print(array[i][j]);
}
System.out.println();
}
// 使用 foreach
for(int a[]: array) { // 第一個迴圈,第一個引數代表迴圈中的型別,即陣列,第二個引數為迴圈物件
for(int j: a) { // 迴圈上一個迴圈中的第一個引數中的每一個即可
System.out.print(j);
}
System.out.println();
}
五、二維陣列元素的預設值
二維陣列分為外層陣列的元素,內層陣列的元素:
外層元素:arr[0],arr[1]等
內層元素:arr[0][0],arr[1][2]等
陣列元素的預設初始化值:
針對於初始化方式一:比如:int[][] arr = new int[4][3];
外層元素的初始化值為:內層陣列的地址值。
內層元素的初始化值為:與一維陣列初始化情況相同
針對於初始化方式二:比如:int[][] arr = new int[4][];
外層元素的初始化值為: null
內層元素的初始化值為:不能呼叫,否則報錯。(NullPointException)
六、二維陣列的記憶體解析
1、二維陣列初始化情況
2、案例一
3、案例二
4、案例三
5、案例四