哈希碰撞

news/2024/10/22 17:46:30

问:两个字符串hashcode相同equals一定相同吗?equals相同hashcode一定相同吗?

答:equals相同hashcode一定相同,hashcode因为哈希碰撞所以equals不一定相同。

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

如下图:

 

 

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


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

 

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

 

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

 

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

实景三维助力智慧水利建设

随着信息技术的快速发展,智慧水利作为智慧城市的重要组成部分,正受到越来越多的关注。实景三维技术,以其独特的优势,为智慧水利建设提供了强有力的支撑。本文将探讨实景三维技术如何助力智慧水利建设。一、智慧水利建设的背景智慧水利是指运用现代信息技术,对水利设施进行…

python第四章课后习题

点击查看代码 import numpy as np import cvxpy as cpx=cp.Variable(6,pos=True) obj=cp.Minimize(x[5]) a1=np.array([0.025, 0.015, 0.055, 0.026]) a2=np.array([0.05, 0.27, 0.19, 0.185, 0.185]) a3=np.array([1, 1.01, 1.02, 1.045, 1.065]) k=0.05; kk=[]; qq=[] while …

Go语言net/http包源码学习

0.前言 该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习。 该笔记很大程度的参考了网名为“小徐先生”的前辈所分享的博客,推荐大家可以先看一看它的博客来一起学习,我的只是照葫芦画瓢还有一些代码更新的讲解而…

linux之core文件调试

linux之core文件调试 前言 有时候程序会异常退出而不带任何日志,此时就可以使用 core 文件进行分析,它会记录程序运行的内存,寄存器,堆栈指针等信息 什么是core文件 通常在 Linux 下遇到程序异常退出或者中止,我们都会使用 core 文件进行分析,其中包含了程序运行时的内存…

物联网从层次结构上分为几层,各层的主要作用是什么

物联网的层次结构包括感知层、网络层和核心层,每个层次都扮演着不可或缺的角色。感知层负责数据采集,网络层实现数据传输,核心层则进行数据处理和决策。这种层次结构的设计使得物联网能够高效地运行,为人们的生活和工作带来了巨大的便利和效益。1. 感知层(Perception Laye…

移动开发(四):.NET MAUI中Android应用修改安装图标和启动页面

今天继续给大家分享.NET MAUI中开发的Android应用如何修改安装图标和启动页面,希望对大家使用Net开发安卓APP提供一些帮助! 一、更换APP应用图标 这里我们直接编辑项目文件 MyFirstMauiApp.csproj来修改APP应用图标 官方案例默认的组合图标,其中ForegroundFile表示前景图像(…

将NC栅格表示时间维度的数据提取出来的方法

本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法~本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法。.nc是NetCDF(Network Common Data Form)文件的扩展名,表示一种常…

哪种IDE能同时写java和前端代码

在选择IDE(集成开发环境)来同时编写Java和前端代码时,几个主要的选择包括IntelliJ IDEA、Eclipse、和Visual Studio Code。IntelliJ IDEA提供了强大的Java开发支持和广泛的前端开发插件,Eclipse以其插件生态系统著称,可以通过安装相应的插件支持Java和前端开发,而Visual …