JAVA:关于数组维度的时间因素

JAVA:关于数组维度的时间因素,java,arrays,performance,multidimensional-array,Java,Arrays,Performance,Multidimensional Array,我有C++的编码经验。 最近,我一直在努力学习Java 我在一个在线法官那里练习一个简单的问题。 该问题需要2x1000000维的数组。 我声明了一个数组: int-ara[][]=new-int[1000000][2] 但是代码不能在3秒的时间限制内完成,并且在第一个测试用例中就得到了超过时间限制的判决 然后我就这样切换维度: int-ara[][]=新int[2][1000000] 并相应地修改了代码,代码被接受了 经过一些实验,我发现这是我的第一个代码超过时间限制的唯一原因 int-ara

我有C++的编码经验。 最近,我一直在努力学习Java

我在一个在线法官那里练习一个简单的问题。 该问题需要2x1000000维的数组。 我声明了一个数组:

int-ara[][]=new-int[1000000][2]

但是代码不能在3秒的时间限制内完成,并且在第一个测试用例中就得到了超过时间限制的判决

然后我就这样切换维度:

int-ara[][]=新int[2][1000000]

并相应地修改了代码,代码被接受了

经过一些实验,我发现这是我的第一个代码超过时间限制的唯一原因

int-ara[][]=new-int[1000000][2]
int-ara[]][]=new-int[2][1000000][code>之间有什么区别?

为什么这些数组声明之间存在如此巨大的时间差异?

分配内存需要时间。分配一个包含5个元素的数组所花费的时间与分配一个元素的5个数组所花费的时间并不相同。对于每个分配,操作系统必须在页表中查找空闲块,分配它,等等


因此,在一个示例中仅声明2个数组,在另一个示例中声明1000000。这就是为什么一个比另一个快。

你认为什么更快?分配1000000个数组,每个数组有2个值,还是分配2个数组,每个数组有1000000个值?你为什么这么认为?来自C++的,你可能会认为<代码> int [3 ] [5 ] < /代码>是一个二维数组。事实并非如此。它是一个数组数组。内部差异很大,尽管在功能上它可以表现为2D数组。但是作为一个数组的数组,每个辅助数组实际上可以有不同的大小,这是纯2D数组无法做到的。请参阅并查看示例15.10.2-2,以了解场景背后发生了什么。