这些代码块之间有什么区别?

时间:2011-11-08 02:29:30

标签: java multidimensional-array

所以我在一本我正在阅读的书中多次查看了这段代码:

int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
   someArray[i] = new int[size];

我认为它与以下声明之间没有任何区别:

int[][] someArray = new int[size][size];

我在这里错过了什么吗?我有什么理由可以使用上面的长代码块吗?

谢谢,

4 个答案:

答案 0 :(得分:6)

您可以使用第一个构造

创建参差不齐的 jagged 数组

答案 1 :(得分:2)

正如parapura所说,你可以创造一种所谓的不规则阵列。基本上你可以做一些三角形的东西(可能像楼梯或圣诞树或任何你想要的东西)。所以它可以像(使用随机数字)

1 2 3

1 2

4 4 5 6 2 3 5

4 5 1

2 2 5 2

其中子阵列的长度是不同的大小。在你的例子中,虽然它们都是相同的大小,所以两种方式完全相同。

可以做到这一点的一个原因是节省内存空间而不是填充空插槽。

答案 2 :(得分:1)

没有差异here。当我们想要创建具有不同大小的数组时,第一个是有用的。

答案 3 :(得分:1)

如果有疑问,请查看字节码 - 特别是像这样的东西只是几行代码 显然,编译器有一个特殊的构造来创建第二种形式。

第一个表单(没有循环): public static void main(java.lang.String []);   码:    0:iconst_3    1:anewarray#2; //类“[我”    4:astore_1    5:返回

第二种形式:

0:iconst_3 1:iconst_3 2:multianewarray#2,2; //类“[[我” 6:astore_1 7:返回

==================

一种看待它的方法是,当你知道你将要有一个“方形”数组时,循环中有很多浪费的时间。想象一下,如果你在谷歌,你需要一个大小= 10000000的二维数组。第一种形式会慢得多。