HashMap是怎么解决哈希冲突的?

 所谓hash冲突,是由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,所以总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。

通常解决hash冲突的方法有:
 1.开放定址法,也称为线性探测法,就是从发生冲突的那个位置开始,按照一定的次序从hash表中找到一个空闲的位置,然后把发生冲突的元素存入到这个空闲位置中ThreadLocal就用到了线性探测法来解决hash冲突的。
 2.链式寻址法,这是一种非常常见的方法,简单理解就是把存在hash冲突的key,以单向链表的方式来存储,比如HashMap就是采用链式寻址法来实现的。
 3.再hash法,就是当通过某个hash函数计算的key存在冲突时,再用另外一个hash函数对这个key做hash,一直运算直到不再产生冲突。这种方式会增加计算时间,性能影响较大。

 HashMap在JDK1.8版本中,通过链式寻址法+红黑树的方式来解决hash冲突问题,其中红黑树是为了优化Hash表链表过长导致时间复杂度增加的问题。当链表长度大于8(默认值)时HashMap会将链表转换为红黑树。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 晨跑第二天,坚持四公里,早上忘记设闹钟,还是自己醒来的,煮上豆浆,炖了白萝卜牛腩汤,衣服放进洗衣机,六点半准时开跑...
    蔚蓝以北阅读 147评论 0 0
  • 武汉的热干面是出了名的,但是十多年前与热干面的偶遇破碎了我对他的向往。在我上次偶遇它时,尚不知其是红透武汉的...
    水母清华阅读 314评论 0 2
  • 二二的:小小 云南,我们又来了…… 对,还是我们仨! 美景、美食、美……… ...
    小钕姊阅读 422评论 0 4
  • 我看大家都有不少自己喜欢的书和自己的读书计划与方法,也许是你们平常读的书较多吧。可是我从加入读书营之前,可...
    沧海一笑_8f63阅读 250评论 0 1
  • 每个世界的自我都是个空壳,它是由过往生活和对周围的感知填充而成的。我们呼吸的空气,经过的无数个街道,停留在每...
    我的理想是不上班阅读 266评论 3 2