经过二维数组的访问方式来测试数据的空间局部性带来的效率差别性,代码以下:数组
static void test1(){
int[][] data = new int[10000][10000];
int temp=1;
long start = System.currentTimeMillis();
for(int i=0;i<10000;i++){
for(int j=0;j<10000;j++){
temp=data[i][j];
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}测试
static void test2(){
int[][] data = new int[10000][10000];
int temp=1;
long start = System.currentTimeMillis();
for(int i=0;i<10000;i++){
for(int j=0;j<10000;j++){
temp=data[j][i];
}
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}test
第一种方式比第二种方法的效率要高30倍左右,本人测试机器是i5-4210H处理器,具备良好空间局部性的程序会很是高效。通常而言数组比链表具备良好的空间局部性,好比前缀树经过双数组trie实现会比普通的trie树高效不少。效率