Hash表处理冲突的方法
内容参考《 数据结构(C语言版)》 【本篇文章使用java实现】
一 开放地址法
处理表达式
其中:
H(Key) : 为哈希函数
m : 为哈希表长
: 为增量序列,三种取法
(1) =1,2,3,....,m-1 ,称线性探测再散列
(2) = ,,,,,......,,(k<=m/2),称为二次探测再散列
(3) =伪随机数序列,陈伟随即探测再散列
线性探测再散列图解
在产生冲突的时候,往数组后面依次查找空的进行填充,如果索引超过了当前哈希表长度,就进行哈希表拓张
二次探测再散列图解
= ,,,,,......,,(k<=m/2),称为二次探测再散列
如果索引超过hashMap的长度,就将哈希表进行拓展
随机探测再散列
就是生成一个随机数进行填充到随机出的位置上
二 再哈希法
其中 军事不同的哈希函数,在产生冲突的时候计算另一个哈希函数地址,知道不冲突,这种方法不容器产生“聚集”,但是增加了计算的时间
三 链地址法
该方法时将所有关键字为同义词的记录保存在一个线性链表中。
假设某哈希函数产生的哈希地址在区间 [0,m-1] 上,即长度为m的链表
四 建立一个公共溢出区