通俗解释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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为 达芬奇芯片 架构_寒武纪的AI架构

    华为 达芬奇芯片 架构_寒武纪的AI架构达芬奇架构是基于AI计算功能设计的,并基于高性能3DCube计算引擎,极大地提高了计算能力和功耗比。根据达芬奇架构,进行了以下优化:多核堆栈用于并行计算能力扩展通过设计片上存储器on-chipmemory(高速缓存/缓冲区Cache/Buffer)以缩短Cube操作和存储距离,减少了对DDR的访问,并减轻了冯·诺依曼的瓶颈问题。在计算和外部存储之间设计了高带宽片外存储器(HBM),以克服计算资源共享存储器的访问速度限制。为了支持大规模的云侧神经网络训练,设计了超高频段网状网络(LSU),以

    2022年9月6日
    6
  • 博客园整改之思考_整改思路

    博客园整改之思考_整改思路在博客园写博客写了三年半的时间了,当初为什么会选择在博客园写,我也记不清是什么原因了,或许这大概是缘分吧。今年3月份后半段的时候,博客园突然访问不了了,如今通过搜索资料,仍然发现有部分文章访问不了,

    2022年8月4日
    4
  • 通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service

    通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service绑定本地服务AndroidManifest.xml中声明服务:<serviceandroid:name=".TestLocalService"><intent-filter><actionandroid:name="maureen.intent.action.BIND_LOCAL…

    2022年9月18日
    2
  • 麦克风声源定位原理_一种利用麦克风阵列进行声源定位的方法与流程

    麦克风声源定位原理_一种利用麦克风阵列进行声源定位的方法与流程本发明涉及计算机信号处理领域,具体涉及一种用麦克风阵列时延估计定位声源的方法。背景技术:20世纪80年代以来,麦克风阵列信号处理技术得到迅猛的发展,并在雷达、声纳及通信中得到广泛的应用。这种阵列信号处理的思想后来应用到语音信号处理中。在国际上将麦克风阵列系统用于语音信号处理的研究源于1970年。1976年,Gabfid将雷达和声纳中的自适应波束形成技术直接应用于简单的声音获取问题。1985年,美国…

    2022年9月22日
    1
  • java的if else语句入门

    条件语句,是程序中根据条件是否成立进行选择执行的一类语句,这类语句在实际使用中,难点在于如何准确的抽象条件。例如实现程序登录功能时,如果用户名和密码正确,则进入系统,否则弹出“密码错误”这样的提示框等

    2021年12月26日
    41
  • 什么是WSDL_wsdl文件详解

    什么是WSDL_wsdl文件详解WSDL(网络服务描述语言,WebServicesDescriptionLanguage)是一门基于XML的语言,用于描述WebServices以及如何对它们进行访问。wsdl:definitionsname=”nmtoken”?targetNamespace=”uri”>importnamespace=”uri”location=”uri”/>*

    2025年8月10日
    2

发表回复

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

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