通俗解释hash碰撞是什么以及如何解决

通俗解释hash碰撞是什么以及如何解决Hash如何存数据hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。如下图:这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。Hash碰撞hash碰撞指的是,两个不同的值(比如张三、李四的学号)经过hash计算后,得到的hash值相同,后来的李四要放到原来的张三的位置,但是数组的位置已经被张三占了,导致冲突。解决方法hash碰撞的解决方式是开放寻址法和拉..

大家好,又见面了,我是你们的朋友全栈君。

Hash如何存数据

hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。

如下图:

通俗解释hash碰撞是什么以及如何解决

这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。

 

Hash碰撞

hash碰撞指的是,两个不同的值(比如张三、李四的学号)经过hash计算后,得到的hash值相同,后来的李四要放到原来的张三的位置,但是数组的位置已经被张三占了,导致冲突

 

解决方法

hash碰撞的解决方式是开放寻址法和拉链法。

开放寻址法指的是,当前数组位置1被占用了,就放到下一个位置2上去,如果2也被占用了,就继续往下找,直到找到空位置。image

拉链法采用的是链表的方式,这个时候位置1就不单单存放的是Entry了,此时的Entry还要额外保存一个next指针,指向数组外的另一个位置,将李四安排在这里,张三那个Entry中的next指针就指向李四的这个位置,也就是保存的这个位置的内存地址。如果还有冲突,就把又冲突的那个Entry放到一个新位置上,然后李四的Entry指向它,这样就形成一个链表。

image

总结起来:开放寻址法和拉链法都是想办法找到下一个空位置来存发生冲突的值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149355.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月16日 下午9:00
下一篇 2022年6月16日 下午9:00


相关推荐

  • java mongodb 使用MongoCollection,BasicDBObject 条件查询

    java mongodb 使用MongoCollection,BasicDBObject 条件查询

    2021年6月7日
    185
  • Java常用设计模式

    Java常用设计模式一、设计模式概念1、定义​Java包含23种设计模式,是一套对代码设计经验的总结,被人们反复利用,多人熟知的代码设计方式。2、目的​为了提高代码的可读性,可扩展性以及代码的复用性,为了解决在写代码过程中遇到的代码设计问题。3、设计模式的六大原则​3.1开闭原则​对扩展开放,对修改关闭(尽可能对代码少修改)​3.2里氏替换原则​它是面向对象基本原则之一,任何父类(基类)出现的地方,子类都可以出现,也就是子类可以替换父类的任何功能(体现了父类的可扩展性)3.3依赖

    2022年7月8日
    25
  • 我国古代的勾股定理

    略微了解了一下古代中国人民对于勾股定理的证明。发现,智慧出自于劳动。何问起当年灌溉插秧需要对位置和时间的精确掌握,所以勾股定理就在劳动中绽放了。一个公式都不需要,看下面的图就可以证明勾股定理了。

    2021年12月25日
    56
  • mac电脑 datagrip 激活码_通用破解码

    mac电脑 datagrip 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    50
  • java计算网络吞吐量_Jmeter中的吞吐量计算

    java计算网络吞吐量_Jmeter中的吞吐量计算请求 单位时间 时间从第一个样品的开始到最后一个样品的结束计算 这包括样本之间的任何间隔 因为它应该代表服务器上的负载 公式为 吞吐量 请求数 总时间 所以在你的情况下 你有 1 个请求 这需要 1129 毫秒 所以 Throughput 1 1129ms 0 000 ms 0 000 1000 sec 0 sec

    2026年3月26日
    2
  • 用C++和SFML写游戏-SFML介绍(1)

    用C++和SFML写游戏-SFML介绍(1)我想大多数初学 C 的人都有这样一个疑惑 那就是学完这门编程语言之后接下来能做什么 并且大多数初学者学习过程都应该是看着这么一个黑框框 就像是这样这么一看学习 C 确实是挺无聊的一件事 实际上 C 能做的事情远比我们想象中的要多 它在游戏 科学计算 网络软件 分布式应用 操作系统 设备驱动程序和嵌入式系统等领域都有应用 应用领域非常广泛 但是缺点也很明显 开发效率低 这里我会写一

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号