hash冲突
在使用hash表时肯定会遇到hash冲突的情况(看你设计的hashCode如何,设计的好,冲突就少一些)
但是冲突再少也会存在冲突,那就需要有处理冲突的方法,下面列出来一些处理hash冲突的方法
开放定址法
一旦发生冲突,就去寻找下一个空的散列地址(按照某种规则去找另一个空地址),只要散列表足够大,总能找到空位
线性探测法
f(key) = (f(key)+$d_i$) mod m ($d_i$=1,2,3,…,m-1)
这种每次加一向后遍历查找空位的方式是线性探测法,但是这样对于存入和查找的效率都会很低
二次探测法
基于线性探测法进行改进,使得其可以双向探测,$d_i$=$1^2$,$2^2$,$3^2$…$q^2$(q<=m/2),使用平方运算来使的不让关键字都聚集在某一区域
再散列法
使用不同的散列函数来进行散列,一个冲突则使用另一个,不过这样做也增加了计算的时间
链地址法
将所有冲突的记录存储在一个单链表中,只是这样在查找时需要遍历单链表
公共溢出法
对于冲突的数据,都存放到另一个溢出表中,在查找时,先在散列表中进行查找,如果没有则去溢出表中顺序查找