多維陣列指二維及以上陣列。二維陣列有兩個層次(行、列),三維有三個層次,以此類推。每個層次對應一個索引。現實中如「班級-座號」、「師-團-營-連-排-班」皆為多層次管理,對應多維陣列概念。
核心理解:陣列的陣列。二維陣列可視為一維陣列,其每個元素又是一維陣列;三維陣列則是元素為二維陣列的一維陣列。邏輯與語法皆支援此觀念。
慣例:二維陣列第一維代表行、第二維代表列,符合直覺。
int[][] map; // 推薦:型別後置雙括號
char c[][]; // 型別後單括號、變數後單括號
int board[][]; // 變數後雙括號
三維需三對括號,位置同理。宣告後記憶體尚未配置實際儲存空間。
int[][] m = {
{1, 2, 3},
{2, 3, 4}
};
內層大括號即一維陣列初始化,外層組合多個一維陣列。三維範例:
int[][][] b = {
{ {1,2,3}, {1,2,3} },
{ {3,4,1}, {2,3,4} }
};
// 固定第二維長度
byte[][] b = new byte[2][3];
int[][] m = new int[4][4];
若第二維長度不一,分步初始化:
int[][] n = new int[2][]; // 只配置第一維
n[0] = new int[4]; // 獨立配置 n[0]
n[1] = new int[3]; // 獨立配置 n[1]
此寫法完美體現「陣列的陣列」:先配置容器陣列,再逐一配置元素陣列。
格式:arrayName[第一維索引][第二維索引]。索引範圍:0 ~ length-1。
array.length 僅回傳第一維長度。計算總元素數需迭代累加:
int[][] m = { {1,2,3,1}, {1,3}, {3,4,2} };
int sum = 0;
for (int i = 0; i < m.length; i++) {
sum += m[i].length; // 累加每行長度
}
// sum = 4 + 2 + 3 = 9
此技巧同樣適用於不規則陣列(Jagged Array)。