Hash冲突后不同的解决方案

98 阅读1分钟

一:开放地址法

最常见的:线性探测法

例如通过hashcode算出hash值,然后通过hash值定位到slot后,该slot已经被占用了,就往后+1,直到找到空的slot存放元素。

例如:ThreadLocal中的ThreadLocalMap就是使用了这种方案解决hash冲突。


二:拉链法

没啥好说的,Java中的HashMap就是使用这个方法,冲突的时候,将slot位置变成一个链表。


三:再哈希法

预先准备多个哈希函数,按顺序使用(都是对key使用),直到算出来的slot位置没有元素。

暂时没有发现应用的场景。


四:建立公共溢出区

正常计算slot位置,若发生冲突则将这个新来的放入公共溢出区中。