数组查询为何比链表快?

 

1寻址操作次数链表要多一些。数组只需对 [基地址+元素大小*k] 就能找到第k+1个元素的地址,对其取地址就能获得该元素。链表要获得第k个元素,首先要在其第k-1个元素寻找到其next指针偏移,再将next指针作为地址获得值,这样就要从第一个元素找起,多了多步寻址操作,当数据量大且其它操作较少时,这就有差距了。

该回答源自:http://tieba.baidu.com/p/5069120437

2CPU缓存会把一片连续的内存空间读入,因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面,平均读取每个元素的时间只要3CPU时钟周期。   而链表的节点是分散在堆空间里面的,这时候CPU缓存帮不上忙,只能是去读取内存,平均读取时间需要100CPU时钟周期。这样算下来,数组访问的速度比链表快33倍! (这里只是介绍概念,具体的数字因CPU而异)。

因此,程序中尽量使用连续的数据结构,这样可以充分发挥CPU缓存的威力。这种对缓存友好的算法称为 Cache-obliviousalgorithm

该回答源自:https://blog.csdn.net/islandww/article/details/72511737

 

综上所述,无论是在已知下标的情况下进入单个元素查询,还是整体遍历,数组都比链表存在明显优势,这下子我也是终于明白了这其中的原理。

 

 

 

你可能感兴趣的:(Java精修,数组查询,链表查询,效率对比,原理)