开放地址法和链表法的优缺点比较:
一 、开放寻址法
开放寻址法优点:
1.开放寻址法基于数组实现,可以利用CPU的cache_line,一次性缓存64字节,可以加快查询的速度。
2.数组进行序列化比较简单。
开放寻址法缺点:
1.数组相对于链表来说,不能动态申请内存,所以在面对数据量不确定的情况下,会更加浪费内存空间。
2.在开发寻址法中,需要逻辑假删数据,否则会导致其他的数据无法散列到对应的槽位上。
3.装填因子不能过大,因为数组相对于链表法来说,冲突的可能性更大。
因此开放寻址法适合数据量不大,装填因子小的时候。
二、 链表法:
链表法优点:
1.链表法中装填因子可以大于1,只要元素均匀地散列到不同的桶中。冲突的可能性要比开放寻址法要小。
2.链表可以动态的申请内存空间,无需像数组在一开始就要申请足够的内存空间。
链表法缺点:
1.链表的内存地址在内存中是随机分布的,不一定是连续分配,因此无法像数组可以利用CPU缓存加快查找速度,对CPU缓存不友好。
2.链表中每个结点存在指针,指针大小一般为4B或者8B,如果单个节点的数据域小于等于指针大小,那么内存将会翻倍增长。但如果数据域本身远大于指针大小,那么指针大小整个内存使用空间来说旧不那么重要了。
因此链表法适合处理大数据量,存储大对象的散列表。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!