示例
可以定义一个具有多个维的数组。通过提供每个维度的索引来访问多维数组,而不是通过提供单个索引来访问。
多维数组的声明可以通过[]为每个维添加常规数组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];
多维数组如何用Java表示图片来源: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 []