开放地址法和链表法的优缺点比较:

一 、开放寻址法

开放寻址法优点:

1.开放寻址法基于数组实现,可以利用CPU的cache_line,一次性缓存64字节,可以加快查询的速度。

2.数组进行序列化比较简单。

开放寻址法缺点:

1.数组相对于链表来说,不能动态申请内存,所以在面对数据量不确定的情况下,会更加浪费内存空间。

2.在开发寻址法中,需要逻辑假删数据,否则会导致其他的数据无法散列到对应的槽位上。

3.装填因子不能过大,因为数组相对于链表法来说,冲突的可能性更大。

因此开放寻址法适合数据量不大,装填因子小的时候。

二、 链表法:

链表法优点:

1.链表法中装填因子可以大于1,只要元素均匀地散列到不同的桶中。冲突的可能性要比开放寻址法要小。

2.链表可以动态的申请内存空间,无需像数组在一开始就要申请足够的内存空间。

链表法缺点:

1.链表的内存地址在内存中是随机分布的,不一定是连续分配,因此无法像数组可以利用CPU缓存加快查找速度,对CPU缓存不友好。

2.链表中每个结点存在指针,指针大小一般为4B或者8B,如果单个节点的数据域小于等于指针大小,那么内存将会翻倍增长。但如果数据域本身远大于指针大小,那么指针大小整个内存使用空间来说旧不那么重要了。

因此链表法适合处理大数据量,存储大对象的散列表。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!