什么是 Hash 冲突?如何解决 Hash 冲突?

目录

一、什么是hash冲突

二、解决hash冲出的方法

链式寻址法

再Hash法

开放寻址法

建立公共溢出区


一、什么是hash冲突

HashMap基于Hash算法实现的,采用数组的结果存储数据,数组长度的默认长度为16,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key,hashCode()计算出hash值,根据hash值将value保存bucket里。当计算出的hash值相同时,我们称之为hash冲突。

二、解决hash冲出的方法

链式寻址法

HashMap把冲突的这些key组成一个单向链表,然后采用尾插法,把这样一个key保存到链表的尾部,另外为了避免链表过长影响查询效率,所以在链表长度大于8,并且数组长度大于等于64的时候,HashMap会把当前链表转化为红黑树,从而减少链表查询时间复杂度的问题,来提升查询效率。

再Hash法

就是如果某个hash函数产生了冲突,再用另外一个hash进行计算,比如布隆过滤器就采用了这种方法。

开放寻址法

就是直接从冲突的数组位置往下寻找一个空的数组下标进行数据存储,这个再ThreadLocal里面有使用到

建立公共溢出区

就是把存在冲突的key统一放在一个公共溢出区里面。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值