为什么在 Java 的 2D / 3D 数组中需要行大小和列大小可选?

Sha*_*war 2 java arrays multidimensional-array

我总是很困惑,为什么 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][][];
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

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

例如:

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

arr[0] = new int[5];
arr[1] = new int[3];
Run Code Online (Sandbox Code Playgroud)

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

如果您将多维数组视为一维数组,其元素本身就是较低维度的数组,则可能会变得不那么令人困惑。

因此,二维 int 数组 ( int[][]) 是一维数组,其元素为int数组 ( int[])。

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

int[][] arr = new int[2][];
Run Code Online (Sandbox Code Playgroud)

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

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

Object[] arr = new Object[2];
Run Code Online (Sandbox Code Playgroud)

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

new int[2][3]实例实际上是特殊情况-因为它实例既外阵列(具有2种元素的一个)和所述内阵列(每一个都具有3种元素),这是外阵列的元素。