Java 和 C 中的多维数组#

在 C# 中,有 2 种方法可以创建多维数组。

int[,] array1 = new int[32,32];

int[][] array2 = new int[32][];
for(int i=0;i<32;i++) array2[i] = new int[32];

我知道第一种方法在内部创建一维数组,第二种方法创建数组数组(访问速度较慢)。

然而,在Java中,没有[,]这样的东西,我看到多维数组是这样声明的:

int[][] array3 = new int[32][32];

由于这样的语法在C#中是非法的,而Java没有,我想知道这是否等同于?还是它仍然是一个数组数组?int[,]array1


答案 1

它仍然是一个数组数组。只是在 C# 中,您必须在循环中创建每个子数组。所以这个Java:

// Java
int[][] array3 = new int[32][32];

等效于以下 C#:

// C#
int[][] array3 = new int[32][];
for (int i = 0; i < array3.Length; i++)
{
    array3[i] = new int[32];
}

(正如 Slaks 所说,在 .NET 中,交错数组通常比矩形数组更快。不过,它们在内存方面的效率较低。


答案 2

你是不正确的;交错(嵌套)数组更快。(CLR 已针对它们进行了优化)

Java不支持真正的多维数组;这是一个锯齿状数组。
Java语法自动创建所有内部数组;在 C# 中,这需要一个单独的循环。