所以我在一本我正在阅读的书中多次查看了这段代码:
int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
someArray[i] = new int[size];
我认为它与以下声明之间没有任何区别:
int[][] someArray = new int[size][size];
我在这里错过了什么吗?我有什么理由可以使用上面的长代码块吗?
谢谢,
答案 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的二维数组。第一种形式会慢得多。