Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这些代码块之间的区别是什么?_Java_Multidimensional Array - Fatal编程技术网

Java 什么';这些代码块之间的区别是什么?

Java 什么';这些代码块之间的区别是什么?,java,multidimensional-array,Java,Multidimensional Array,因此,在我正在阅读的一本书中,我多次阅读了这段代码: int[][] someArray = new int[size][]; for(int i=0; i<size; i++) someArray[i] = new int[size]; 我错过什么了吗?有什么理由我应该使用上面的长代码块吗 谢谢,您可以使用第一个构造创建参差不齐的或数组这里没有差异。当我们想要创建具有不同大小的数组时,第一个非常有用。正如parapura所说,您可以创建所谓的不规则数组。基本上,你可以做一些三角形

因此,在我正在阅读的一本书中,我多次阅读了这段代码:

int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
   someArray[i] = new int[size];
我错过什么了吗?有什么理由我应该使用上面的长代码块吗


谢谢,

您可以使用第一个构造创建参差不齐的数组

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

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

1 2 3

1 2

4 4 5 6 2 3 5

4 5 1

2 2 5 2

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


这样做的一个原因是为了节省内存空间,而不是零填充空插槽。

如果有疑问,请查看字节码——特别是对于这样的代码,它只是几行代码。
显然,编译器有一个特殊的构造来创建第二个表单

第一种形式(无循环): 公共静态void main(java.lang.String[]); 代码: 0:iconst_3 1:anewarray#2//类“[I” 4:astore_1 5:返回

第二种形式:

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

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


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

+1用于提及不规则数组。但在上面的示例中,两个数组将是相同尺寸的数组(大小*大小)。但假设在第一个代码段中,您更改了'someArray[i]=new int[i]'。请注意,我将'new int[size]'改为'new int[i]“这就是允许你做的,这是一个不规则的数组!是的,我会理解如果他们在for循环中给出不同的大小,但他们使用相同的‘大小’。所以这对我来说没有任何意义。”你是对的。如果你创建m*n数组,那么第一种方法就没有意义。我只是提到了潜在的差异是什么e可以是ge吗
int[][] someArray = new int[size][size];