Han*_*esh 12 c# java arrays jagged-arrays multidimensional-array
在C#中,有两种方法可以创建多维数组.
int[,] array1 = new int[32,32];
int[][] array2 = new int[32][];
for(int i=0;i<32;i++) array2[i] = new int[32];
Run Code Online (Sandbox Code Playgroud)
我知道第一种方法在内部创建一维数组,第二种方法创建一个数组数组(访问速度较慢).
但是在Java中,没有[,]这样的东西,我看到多维数组声明如下:
int[][] array3 = new int[32][32];
Run Code Online (Sandbox Code Playgroud)
由于这种语法在C#中是非法的,而Java没有int[,],我想知道这是否等效array1?或者它仍然是一个数组数组?
Jon*_*eet 10
它仍然是一个数组数组.只是在C#中你必须在循环中创建每个子数组.所以这个Java:
// Java
int[][] array3 = new int[32][32];
Run Code Online (Sandbox Code Playgroud)
相当于这个C#:
// C#
int[][] array3 = new int[32][];
for (int i = 0; i < array3.Length; i++)
{
array3[i] = new int[32];
}
Run Code Online (Sandbox Code Playgroud)
(正如Slaks所说,锯齿状阵列在.NET中通常比矩形阵列更快.但它们在内存方面效率较低.)
你错了; 锯齿状(嵌套)数组更快.(CLR针对它们进行了优化)
Java不支持真正的多维数组; 这是一个锯齿状的阵列.
Java语法自动创建所有内部数组; 在C#中,需要一个单独的循环.
因为人们关注.NET中多维与交错数组的性能,所以我实现了一些测试,并对8k乘8k元素的结果进行了基准测试:
测试是:
结果如下:
one <> Elapsed Time: 0.543558s
two <> Elapsed Time: 0.8911516s
three <> Elapsed Time: 0.8908123s
four <> Elapsed Time: 1.1367238s
five <> Elapsed Time: 0.3039648s
six <> Elapsed Time: 0.8110969s
seven <> Elapsed Time: 0.2629394s
Run Code Online (Sandbox Code Playgroud)
为了好玩,我也在WP7模拟器上运行它们,并得到类似的数字.
测试功能的代码在这里.