Java 对于循环遍历2D数组,这比2快,还是相同的速度? for(int x=0;x

Java 对于循环遍历2D数组,这比2快,还是相同的速度? for(int x=0;x,java,arrays,Java,Arrays,我在这里设置了一段代码,用于为地图创建一个200x200对象的2D数组,我想知道它的速度是否相同,或者它是否确实运行得更快。我正在尝试优化阵列创建 谢谢 编辑:假设Y从0开始,高度始终为200 编辑2:感谢所有回答:D是的,我本可以创建一些东西来测试它,但是呃,想想看,如果你有一个200*200数组,并且你想在每个数组中添加一些新实例,那么你必须在每个“单元格”=40000个单元格中进行测试。无论如何优化,你都不会比这更好 即使你不需要骑自行车,也要用自行车 for (int x = 0; x

我在这里设置了一段代码,用于为地图创建一个200x200对象的2D数组,我想知道它的速度是否相同,或者它是否确实运行得更快。我正在尝试优化阵列创建

谢谢


编辑:假设Y从0开始,高度始终为200
编辑2:感谢所有回答:D是的,我本可以创建一些东西来测试它,但是呃,想想看,如果你有一个200*200数组,并且你想在每个数组中添加一些新实例,那么你必须在每个“单元格”=40000个单元格中进行测试。无论如何优化,你都不会比这更好

即使你不需要骑自行车,也要用自行车

for (int x = 0; x < height; x++) {
        map[x][y] = new Plot(x, y, "map");
        if (x == 199 && y < 199) {
            x = 0;
            y++;
        }
    }

您仍然需要编写40000个命令

生成的代码不会更快-生成的指令几乎相同;事实上,当启用编译器优化时,编译器可能难以有效地优化任一循环,因为它无法将它们识别为简单循环

绝大多数执行时间将用于分配新内存,以及向
map
数组写入指针。事实上,有一个潜在的改进出现了:目前,您正在访问
map
数组,如下所示:

x[0][0] = ...
x[0][1] = ...
等等

这是不可取的,因为地址在内存中相距很远。访问内存的方式最好是使彼此接近的地址在时间上彼此接近,因为这样对缓存更友好


因此,如果您要交换一轮迭代的顺序(例如,
[0][0]、[0][1]、[0][2]、…[1][0]、[1][1]、[1][2]…
),那么您可能会发现您的代码运行得更快,也可能不会;这一切都取决于机器的结构。

假设Y从0开始,高度始终为200,您是否对它们计时?如果有任何速度差,它应该很小。如果你想优化它,你应该看看你的对象创建,看看你是否能让它更快,而不是更快,可读性更低。即时编译将在这段代码中遇到更多问题,并且永远不会生效。@user234461哦!!对不起,是的。我误读了密码
map[0][0]
map[1][0]
map[2][0]
...
map[0][1]
map[1][1]
map[2][1]
...
map[0][2]