一維陣列使用陣列名稱與一個索引值來指定存取陣列元素,您也可以宣告二維陣列,二維陣列使用陣列名稱與兩個索引值來指定存取陣列元素,其宣告方式與一維陣列類似:
從上面這個程式片段來看,就可以清楚的看出二維陣列的索引方式,您宣告了2列(Row)3行(Column)的陣列,您可以使用{ }與適當的斷行協助您指定陣列初值,下面這個程式簡單的示範二維陣列的存取:
執行結果:
在使用二維陣列物件時,注意length所代表的長度,陣列名稱直接加上length,所指的是有幾列(Row),而使用索引加上length,指的是該列所擁有的元素,也就是行(Column)數目,要瞭解為何是這樣,必須從物件配置的角度來說明。
以物件的方式來配置一個二維陣列物件,您使用以下的語法:
上面這個程式片段中,您配置了2列3行的二維陣列物件,由於資料型態是int,所以陣列元素的預設元素為0,事實上這樣的語法是Java為了程式設計人員使用上的方便所設計的,來細究配置的細節。
在上面的程式片段中,其實arr[0]、arr[1]是兩個一維陣列物件,其長度為3,而arr的型態為int[][],內容值為arr[0]與arr[1],其關係如下:

從上圖中您可以看到,arr名稱參考至int[][]型態的物件,而arr[0]與arr[1]再分別參考至一個一維陣列物件,所以這也就是為何上面的程式中,使用的length所表示的長度意義,您也可以知道,在Java中,一個二維陣列的配置,各個元素的記憶體位置並不是連續的。
同樣的道理,您也可以宣告三維以上的陣列,如果要宣告同時初始元素值,可以使用以下的語法:
上面這個程式片段所宣告的三維陣列是2x2x3,您將之想為兩面2x3二維陣列交疊在一起就是了,每一面的元素如下:
第一面
1 2 3
4 5 6
第二面
7 8 9
10 11 12
您也可以藉由立方體的(x, y, z)關係來標示三個索引值的關係,也就是列、行與高。
如果要動態宣告三維陣列,就使用以下的語法:
多維以上的陣列在Java中也是可行的,但並不建議使用,使用多維陣列會讓元素索引的指定更加困難,此時適當的將資料加以分割,或是使用其它的資料結構來解決,會比直接宣告多維陣列來得實在。
由以上的說明,接下來討論一個進階議題:不規則陣列。陣列的維度不一定要是四四方方的,您也可以製作一個二維陣列,而每個維度的長度並不相同,例如:
執行結果:
這個例子只是上面的說明之觀念延伸,在這個例子中,陣列第一列的長度是3,而第二列的長度是5。
int[][] arr = {{1, 2, 3},
{4, 5, 6}};
{4, 5, 6}};
從上面這個程式片段來看,就可以清楚的看出二維陣列的索引方式,您宣告了2列(Row)3行(Column)的陣列,您可以使用{ }與適當的斷行協助您指定陣列初值,下面這個程式簡單的示範二維陣列的存取:
- TwoDimarray.java
public class TwoDimArray {
public static void main(String[] args) {
int[][] arr = {{1, 2, 3},
{4, 5, 6}};
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[0].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}
執行結果:
1 2 3 4 5 6 |
在使用二維陣列物件時,注意length所代表的長度,陣列名稱直接加上length,所指的是有幾列(Row),而使用索引加上length,指的是該列所擁有的元素,也就是行(Column)數目,要瞭解為何是這樣,必須從物件配置的角度來說明。
以物件的方式來配置一個二維陣列物件,您使用以下的語法:
int[][] arr = new int[2][3];
上面這個程式片段中,您配置了2列3行的二維陣列物件,由於資料型態是int,所以陣列元素的預設元素為0,事實上這樣的語法是Java為了程式設計人員使用上的方便所設計的,來細究配置的細節。
在上面的程式片段中,其實arr[0]、arr[1]是兩個一維陣列物件,其長度為3,而arr的型態為int[][],內容值為arr[0]與arr[1],其關係如下:

從上圖中您可以看到,arr名稱參考至int[][]型態的物件,而arr[0]與arr[1]再分別參考至一個一維陣列物件,所以這也就是為何上面的程式中,使用的length所表示的長度意義,您也可以知道,在Java中,一個二維陣列的配置,各個元素的記憶體位置並不是連續的。
同樣的道理,您也可以宣告三維以上的陣列,如果要宣告同時初始元素值,可以使用以下的語法:
int[][][] arr = {
{{1, 2, 3}, {4, 5, 6}},
{{7, 8, 9}, {10, 11, 12}}
};
{{1, 2, 3}, {4, 5, 6}},
{{7, 8, 9}, {10, 11, 12}}
};
上面這個程式片段所宣告的三維陣列是2x2x3,您將之想為兩面2x3二維陣列交疊在一起就是了,每一面的元素如下:
第一面
1 2 3
4 5 6
第二面
7 8 9
10 11 12
您也可以藉由立方體的(x, y, z)關係來標示三個索引值的關係,也就是列、行與高。
如果要動態宣告三維陣列,就使用以下的語法:
int[][][] arr = new int[2][2][3];
多維以上的陣列在Java中也是可行的,但並不建議使用,使用多維陣列會讓元素索引的指定更加困難,此時適當的將資料加以分割,或是使用其它的資料結構來解決,會比直接宣告多維陣列來得實在。
由以上的說明,接下來討論一個進階議題:不規則陣列。陣列的維度不一定要是四四方方的,您也可以製作一個二維陣列,而每個維度的長度並不相同,例如:
- TwoDimArray.java
public class TwoDimArray {
public static void main(String[] args) {
int arr[][];
arr = new int[2][];
arr[0] = new int[3];
arr[1] = new int[5];
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++)
arr[i][j] = j + 1;
}
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}
執行結果:
1 2 3 1 2 3 4 5 |
這個例子只是上面的說明之觀念延伸,在這個例子中,陣列第一列的長度是3,而第二列的長度是5。