如何解决hash冲突

hash冲突

在使用hash表时肯定会遇到hash冲突的情况(看你设计的hashCode如何,设计的好,冲突就少一些)

但是冲突再少也会存在冲突,那就需要有处理冲突的方法,下面列出来一些处理hash冲突的方法

开放定址法

一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,总能找到空位

线性探测法

f(key) = (f(key)+di) mod m (di=1,2,3,…,m-1)

这种每次加一向后遍历查找空位的方式是线性探测法,但是这样对于存入和查找的效率都会很低

二次探测法

基于线性探测法进行改进,使得其可以双向探测,di=12,22,32…q2(q<=m/2),使用平方运算来使的不让关键字都聚集在某一区域

再散列法

使用不同的散列函数来进行散列,一个冲突则使用另一个,不过这样做也增加了计算的时间

链地址法

将所有冲突的记录存储在一个单链表中,只是这样在查找时需要遍历单链表

公共溢出法

对于冲突的数据,都存放到另一个溢出表中,在查找时,先在散列表中进行查找,如果没有则去溢出表中顺序查找

https://zhhll.icu/2021/java基础/集合/10.hash冲突/

本文由mdnice多平台发布

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值