为什么Java中的2D/3D数组中需要行大小,而列大小是可选的



我一直很困惑,为什么Java中的2D数组对声明行而不是列的大小有严格的要求,这进一步混淆了3D和4D数组。

// Invalid, 2D array with no row and no column?
int[][] arr = new int[][];
// Valid, 2D array of size 2X3
int[][] arr = new int[2][3];
// Valid, column size is not specified, size of 2D array?
int[][] arr = new int[2][];
// Valid, column size is not specified, size of 3D array?
int[][][] arr = new int[2][][];

它允许您延迟关于列数的决策,并为不同的行定义不同的列数。

例如:

int [][] arr = new int[2][];
arr[0] = new int[5];
arr[1] = new int[3];

数组的第一行有5列,但第二行只有3列。如果在声明二维数组时指定列数,则这是不可能的。

如果你把多维数组想象成一维数组,其元素本身就是较低维度的数组,那么可能会变得不那么令人困惑。

因此,2维int数组(int[][](是元素为int数组(int[](的1维数组。

您可以通过指定元素的数量来实例化此数组:

int[][] arr = new int[2][];

它为您提供了一个由两个int[]元素组成的数组,其中2元素被初始化为null

这类似于初始化某个引用类型的数组:

Object[] arr = new Object[2];

它为您提供了一个由两个Object元素组成的数组,其中2元素被初始化为null

new int[2][3]实例化实际上是一种特殊情况,因为它实例化了外部阵列(具有2个元素的阵列(和内部阵列(每个阵列具有3个元素(,它们都是外部阵列的元素。

您可以在末尾添加大括号{}。这是有效的,一个没有行和列的空2D数组:

int[][] arr = new int[][]{};

另请参阅:
•初始化仅具有行数的2D阵列
•Java中的数组声明和初始化

最新更新