多维和锯齿状阵列
可以定义具有多个维度的数组。不是通过提供单个索引来访问,而是通过为每个维度指定索引来访问多维数组。
多维数组的声明可以通过将每个维度的 []
添加到常规数组 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 表示
锯齿状数组文字初始化
多维数组和锯齿状数组也可以用文字表达式初始化。以下声明并填充 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[]