Hash冲突

       前几天面试时候遇到这样一个问题:hash底层是怎么解决哈希碰撞的,刚遇到这个问题是云里雾里,根本就是什么也不懂,今天突然想起,索性也就查了一查,其实平时开发中很少用到,一般都是面试时候才会用到,但是了解一些对以后的开发和基础知识的构建我相信还是有很大帮助的。

     官方解释: 如果两个输入串的hash函数的值一样,则称这两个串是一个碰撞(Collision)。

     我自己的理解: 足够多个对象存入到 哈希表中,必然有hashCode相同的情况,那么就出现了哈希碰撞。

      哈希表对哈希碰撞的处理方式:

      A、开放地址法:

            1、线性探测:从要插入的位置线性依次向下的探测空白单元,如第5343个被占用,则探测第5344个位置。

            2、二次探测法:与线性探测类似 ,只不过每次都是前更多的坐标数,以避免哈希聚集(当x+1位置有元素时候,他就认为这里有个小聚集,然后探测x+4,x+9/…以此类推)

            3、再哈希法:构造若干个哈希函数,当发生冲突时,根据另一个哈希函数计算下一个哈希地址,直到冲突不再发 生。

      B、链地址法:

            每个单元都设置链表而不是要插入的对象,当出现地址冲突的时候,存入后面的链接地址中

             

   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值