多維和鋸齒狀陣列

可以定義具有多個維度的陣列。不是通過提供單個索引來訪問,而是通過為每個維度指定索引來訪問多維陣列。

多維陣列的宣告可以通過將每個維度的 [] 新增到常規陣列 decleration 來完成。例如,要建立一個二維 int 陣列,請在宣告中新增另一組括號,例如 int[][]。這繼續用於三維陣列(int[][][])等等。

要定義具有三行和三列的二維陣列:

int rows = 3;
int columns = 3;
int[][] table = new int[rows][columns];

可以對陣列建立索引,並使用此構造為其賦值。請注意,未分配的值是陣列型別的預設值,在本例中為 0,用於 int

table[0][0] = 0;
table[0][1] = 1;
table[0][2] = 2;

也可以一次例項化一個維度,甚至可以製作非矩形陣列。這些通常被稱為鋸齒狀陣列

int[][] nonRect = new int[4][];

值得注意的是,儘管可以定義鋸齒狀陣列的任何維度,但必須定義其前一級別。

// valid
String[][] employeeGraph = new String[30][];

// invalid
int[][] unshapenMatrix = new int[][10];

// also invalid
int[][][] misshapenGrid = new int[100][][10];

多維陣列如何用 Java 表示

https://i.stack.imgur.com/AmnKk.gif

圖片來源: http//math.hws.edu/eck/cs124/javanotes3/c8/s5.html

鋸齒狀陣列文字初始化

多維陣列和鋸齒狀陣列也可以用文字表示式初始化。以下宣告並填充 2x3 int 陣列:

int[][] table = {
    {1, 2, 3},
    {4, 5, 6}
};

注意 :鋸齒狀子陣列也可能是 null。例如,下面的程式碼宣告並填充了一個二維 int 陣列,其第一個子陣列是 null,第二個子陣列是零長度,第三個子陣列是一個長度,最後一個子陣列是兩個長度陣列:

int[][] table = {
    null,
    {},
    {1},
    {1,2}
};

對於多維陣列,可以通過索引提取較低階別維度的陣列:

int[][][] arr = new int[3][3][3];
int[][] arr1 = arr[0]; // get first 3x3-dimensional array from arr
int[] arr2 = arr1[0]; // get first 3-dimensional array from arr1
int[] arr3 = arr[0]; // error: cannot convert from int[][] to int[]