多维和锯齿状阵列

可以定义具有多个维度的数组。不是通过提供单个索引来访问,而是通过为每个维度指定索引来访问多维数组。

多维数组的声明可以通过将每个维度的 [] 添加到常规数组 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[]