为什么一个for-loop比另一个更快,即使他们做了#34;相同"?

时间:2015-05-21 16:18:13

标签: java

情况:两个for循环为int [] []数组赋值。

  • First Loop:将外部计数器添加到内部数组
  • 第二个循环:将外部计数器添加到外部数组

以下是代码:

public static void main(String[] args) {

    int[][] array = new int[4096][4096];

    long start = System.currentTimeMillis();
    for(int i = 0; i<4096;i++){
        for(int j = 0; j<4096;j++){
            array[i][j] = i*4096+j;
        }
    }
    System.out.println("First loop: " + (System.currentTimeMillis() - start));
    start = System.currentTimeMillis();
    for(int i = 0; i<4096;i++){
        for(int j = 0; j<4096;j++){
            array[j][i] = i*4096+j;
        }
    }
    System.out.println("Second loop: " + (System.currentTimeMillis() - start));
}

输出:

First loop: 25
Second loop: 83

问题:为什么一个比另一个快?

1 个答案:

答案 0 :(得分:0)

因为Java将2D数组存储为连续的1D数组(行主格式)列表,因此以行主格式移动将花费更少的时间。