可以定义一个具有多个维的数组。通过提供每个维度的索引来访问多维数组,而不是通过提供单个索引来访问。
多维数组的声明可以通过[]为每个维添加常规数组decle来完成。例如,要制作二维int数组,请在声明中添加另一组括号,例如int[][]。对于3维数组(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][];
重要的是要注意,尽管可以定义锯齿状数组的任何维数,但必须定义其前一级。
// 有效 String[][] employeeGraph = new String[30][]; // 无效 int[][] unshapenMatrix = new int[][10]; // 也无效 int[][][] misshapenGrid = new int[100][][10];
图片来源:http://math.hws.edu/eck/cs124/javanotes3/c8/s5.html
锯齿数组文字初始化
多维数组和锯齿状数组也可以使用文字表达式进行初始化。以下内容声明并填充了2x3int数组:
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]; // 从arr获取第一个3x3维数组 int[] arr2 = arr1[0]; // 从arr1获取第一个3维数组 int[] arr3 = arr[0]; // 错误:无法从int [] []转换为int []