哈希碰撞

news/2024/10/22 17:43:33/文章来源:https://www.cnblogs.com/azwz/p/18493393

问:两个字符串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.hqwc.cn/news/819270.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

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)文件的扩展名,表示一种常…

Express的使用笔记7 将数据保存到数据库中

前面我们在使用的时候是将数据保存在json中,显然是不够方便的,也不够专业,这里我们尝试将数据保存到数据库中。 1. 跟随这个项目的demo,使用的是MongoDB,那首先得安装一个MongoDB咯。 1) 先下载一个zip安装包,我选择的是5版本的 https://www.mongodb.com/try/download/c…

OOP前三次题目集总结

前言 关于面对对象 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,主要通过对象的概念来组织代码。它的核心思想是将现实世界的事物抽象为对象,通过对象之间的交互来实现程序的功能。而本学期我们学习的 JAVA 则是一种广泛使用的编程语言,支持完整的OOP特…

20222406 2024-2025-1 《网络与系统攻防技术》实验三实验报告

20222406 2024-2025-1 《网络与系统攻防技术》实验三实验报告 1.实验内容 1.1 实践内容正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧 通过组合应用各种技术实现恶意代码免杀 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软…

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

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

2024.10.22总结

byd放三道黑是吧本文于 github 博客同步更新。 今天打两场 byd放三道黑是吧。 第一场: A: CF1261F 将区间拆分为 \([x2^{i},(x+1)2^{i})\) 的形式,发现两个区间中的数两两异或后形成的仍为一个区间,将 A,B 都拆分后区间两两异或会得到 \(O(n^2\log^2n)\) 个区间,取并即为答…