定义:在哈希表中,不同的关键字值对应到同一个存储位置的现象。即两个不同对象的HashCode相同,这种现象称为hash冲突。
解决哈希冲突的办法:
1.开放定址法
2.再哈希法
3.链地址法
4.创建公共溢出区
以下进行详细解释:
1.开放定址法
一旦发生了冲突(该地址存在其他元素),就按照某种规则去寻找另一处空地址;
(1)线性探测法
当需要存放值的位置被占了,就往后面加1并对m取模直到存在一个空余的位置供我们存放值。
公式:h(x)=(Hash(x)+i)mod(Hashtable.length);
(2)平方探测法(二次探测法)
当我们所需要存放值的位置被占了,会前后寻找而不是单独方向的寻找。
公式:h(x)=(Hash(x) +i)mod (Hashtable.length);
2.再哈希法
同时构造多个不同的哈希函数,等发生哈希冲突就使用第二个,第三个....等其他的哈希函数计算地址,直到不发生冲突为止。虽然不易发生聚集,但是增加了计算时间。
3.链地址法
将所有的哈希地址相同的记录都链接在同一链表中。
公式:h(x)=xmod(Hashtable.length);
4.创建公共溢出区
将哈希表分为基本表和溢出表,将发生冲突的都存在溢出表中。