所以我在读的一本书中多次阅读了这段代码:
int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
someArray[i] = new int[size];
我看不出这与以下声明有任何区别:
int[][] someArray = new int[size][size];
我错过了什么吗?有什么理由让我使用上面的长代码块吗?
谢谢,
您可以使用第一个构造
正如parapura所说,您可以创建所谓的粗糙数组。从本质上讲,你可以制作三角形之类的东西(可能像楼梯、圣诞树或任何你想要的东西(。所以它可以像(使用随机数(
1 2 3
12
4 4 5 6 2 3 5
4 5 1
2 2 5 2
其中子阵列的长度是不同的大小。在你的例子中,尽管它们都是相同的尺寸,所以两种方式都做着完全相同的事情。
这样做的一个原因是节省内存空间,而不是零填充空插槽。
无差异here
。当我们想要创建具有不同大小的数组时,第一个非常有用。
当有疑问时,请查看字节码——尤其是对于像这样只有几行代码的东西
显然,编译器有一个特殊的结构来创建第二种形式
第一种形式(没有循环(:public static void main(java.lang.String[](;代码:0:iconst_31:anewarray#2//class"[I"4:astore_15:返回
第二种形式:
0:iconst_31:iconst_32:多更新阵列#2,2//class"[[I"6:astore_17:返回
===============
一种方法是,当你知道无论如何都会有一个"方形"数组时,循环中会浪费很多时间。想象一下,如果你在谷歌,你需要一个大小为10000000的二维数组。第一种形式会非常慢。