首页 > 编程知识 正文

如何减少hash碰撞,javahashcode碰撞

时间:2023-05-03 20:00:15 阅读:9431 作者:1036

文章目录一,什么是hash冲突? 二、hash冲突的原因三、解决hash冲突的4中方式1 .开放地址方法(1)线性检测)2)平方检测)3)伪随机检测)链地址法) HashMap的zzdxhd冲突解决方法)3.公共溢出区域的

一、散列冲突是什么? 根据经过key即函数f(key )得到的结果,将当前的key value键值对作为地址存储,这是hashmap值的存储方法。 但是,我发现计算出的地址已经有人先来了

你蹲着,又和别人进来一样,但是只有一个洞的话,就会发生冲突,需要创造新的空间让别人去厕所。

二、导致混列冲突的zzdxhd是通过重新压缩数据提高效率的一种解决方案。 但是,zzdxhd函数生成的zzdxhd值有限,因此可能会有很多数据,即使在zzdxhd函数处理后,也会有与同一值相对应的不同数据。 发生了zzdxhd的冲突。

三、解决混列冲突4中方式1 .开放寻址方法(1)线性探测器顺序取值时,如果某个数据值已经存在,在原始值的基础上向后添加一个单位,直到zzdxhd冲突没有发生。

在这个空间不足的时候,直接放入这个空间后面的空闲空间

图:

)当重平方探测器按顺序确定值时,如果某个数据的值已经存在,则将原始值加1的平方单位,如果还存在,则减去1的平方单位。 随之是2的平方、3的平方等。 直到zzdxhd冲突没有发生。

请注意平方不要超过容量的值

当Size=16时,寻找候选对象的单元只能获得I=1、2、3,也就是说,距离碰撞单元1、4、9个单位的位置。

)3)伪随机检测顺序取值时,如果某个数据已经存在,用随机函数随机生成随机数,在原始值中加入随机数,避免发生zzdxhd冲突。

2 .链地址法(HashMap的zzdxhd冲突解决方法)使用链表连接相同的值。 使用数组存储每个链表。

是hashmap的基本原理。 数组链表就是没有红黑树

好处:

)拉链法处理碰撞简单,且无堆积现象,即除同义词外决不碰撞,因此平均寻道长度短;

)2)拉链法会动态申请各链表上的节点空间,适用于表格制作前无法确定表格长度的情况。

)开放地址法为了减少冲突,需要减小填充因子,因此节点规模大会浪费很多空间。 拉链法取1且节点较大时,拉链法增加的指针区可忽略,节省空间;

)在用拉链法构建的哈希表中,删除节点的操作很容易。 只要简单地删除链表中相应的节点就可以了。

缺点:

)指针占用大空间时,会浪费空间。 使用空间来增加哈希表的规模可以提高开放地址法的效率。

图:

3 .创建公共溢出创建公共溢出存储所有zzdxhd冲突数据。

4 .再zdxhd法对冲突的zzdxhd值再次进行zzdxhd处理,直至zzdxhd冲突消失。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。