情况:两个for循环为int [] []数组赋值。
以下是代码:
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
问题:为什么一个比另一个快?
答案 0 :(得分:0)
因为Java将2D数组存储为连续的1D数组(行主格式)列表,因此以行主格式移动将花费更少的时间。