Hash 碰撞是什么?如何解决(开放寻址法和拉链法)?hash链表和红黑树知识扩展?

article/2025/11/11 11:10:21

一、什么是Hash碰撞

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

二、Hash如何存数据

hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。
在这里插入图片描述

三、解决方法

1 开放寻址法:开放寻址法指的是,当前数组位置1被占用了,就放到下一个位置2上去,如果2也被占用了,就继续往下找,直到找到空位置。
在这里插入图片描述

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

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

4、hash链表和红黑树知识扩展

1:HashMap的初始长度?每次扩容?
HashMap的初始长度是16,每次扩容时都会在原始的长度上翻倍(size × 2),所以长度一定是2的n次方。
哈希桶扩容的条件:元素数量 >= 长度(16)× 加载因子(0.75)

2:链表在多长的时候会转红黑树,为啥在这个长度转红黑树?
当链表长度超过8,并且经过扩容后当前数组长度大于64,会将链表转化为红黑树
而当HashMap的红黑树的元素小于等于6时重新转化为链表结构

3:为何HashMap的红黑树的元素小于等于6时重新转化为链表结构?
为了避免频繁来回转化。

4:为什么当链表长度超过8,并且经过扩容后当前数组长度大于64,才会将链表转化为红黑树?
为什么会在8转为红黑树,可以看一下代码的注释,注释上说了作者是根据概率学的角度来决定的,因为根据统计,一个桶位置上的节点数目的分布式泊松分布,长度超过8的概率十分小,所以作者选用了8作为链表转为红黑树的阈值
为什么并且经过扩容后当前数组长度大于64转为红黑树,因为如果hash冲突通过开放寻址法先存放

5.为什么JDK1.8 HashMap选择红黑树而不是其他的树?
是因为红黑树的特性让它拥有较高的查询性能的同时,避免维持平衡带来的很大开销。

6.就是无论是链表还红黑树,其在数组里面的位置就是一个,get得时候我怎么知道哪个值是我想要的?
先通过寻址算法找到数组对应的index下标;然后获取当前下标的node节点,在get key的过程中是遍历链表或者遍历红黑树来查找对应的key的值value;遍历链表O(n) 遍历红黑树O(lgn)


http://chatgpt.dhexx.cn/article/5GRKQoyx.shtml

相关文章

hash碰撞解决方法

Hash碰撞冲突 我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一…

Java 集合深入理解 (十一) :HashMap之实现原理及hash碰撞

文章目录 前言哈希表原理实现示例HashMap实现原理全篇注释分析实现注意事项默认属性分析属性分析构造方法分析重要的put方法总结 前言 哈希表(hashMap)又叫散列表 是一种非常重要的数据结构基于map接口实现应用场景及其丰富,本地临时缓存&a…

java基础篇 - HashMap 理解Hash碰撞

HashMap是大家都在用,面试的时候也经常会被考的考点,在这篇文章中说下HashMap的hash碰撞和减轻碰撞的优化。 1、什么是hash碰撞 在解释Hash碰撞之前先说一下hashmap的存储结构、添加和检索是怎么实现的 1.1HashMap的存储结构 HashMap的存储结构是En…

大白话解释hash碰撞是什么以及如何解决

一、Hash如何存数据 hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。 这里的id是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。 二、Ha…

hash碰撞的概率推导(生日攻击生日问题)

1.关于hash碰撞 哈希碰撞是指,两个不同的输入得到了相同的输出; hash碰撞不可避免,hash算法是把一个无限输入的集合映射到一个有限的集合里,必然会发生碰撞; 2.碰撞概率的问题描述的其他形式 n个球,&…

Hash碰撞(冲突)的解决方案

hash算法就是,用同一个哈希函数计算: 两个相同的值,计算出的hash值一定相同, 两个不同的值,计算出的hash值可能不同,也可能相同,当相同时就是hash冲突 一、链式寻址法 也叫“拉链法”&#…

MD5 hash碰撞实现解密

目录 1.前言 2.MD5 hash单个碰撞解密 3.MD5 hash批量碰撞解密 1.前言 在日常渗透中,获取到后台密码往往是加密的,常见的就是MD5加密,常见的做法我们会使用在线网站去解密,常用的有cmd5,somd5,cmd5对于一些密文是要收费的,有时我们就想白嫖。 这时我们会用so…

哈希碰撞+mysql_HashMap之Hash碰撞冲突解决方案及未来改进

HashMap位置决定与存储 通过前面的源码分析可知,HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法&am…

Hash碰撞概率

计算Hash冲突的概率 虽然已经很多可以选择的Hash函数,但创建一个好的Hash函数仍然是一个活跃的研究领域。一些Hash函数是快的,一些是慢的,一些Hash值均匀地分布在值域上,一些不是。对于我们的目的,让我们假设这个Hash函数是非常好的。它的Hash值均匀地分布在值域上。 在这…

HashMap之Hash碰撞

详细理解了Hash碰撞及处理方法 为什么会出现hash碰撞 在hash算法下,假设两个输入串的值不同,但是得到的hash值相同, 即会产生hash碰撞 一个很简单的例子: 假设你自己设计了一个计算hash的算法toHashValue(String). 是取的输入值的Unicode编码值(当然实际的情况会比这复杂很…

hashmap存储方式 hash碰撞及其解决方式

1.Map 的存储特点 在 Map 这个结构中,数据是以键值对(key-value)的形式进行存储的,每一个存储进 map 的数据都是一一对应的。 创建一个 Map 结构可以使用 new HashMap() 以及 new TreeMap() 两种方式,两者之间的区别…

Java Hash 碰撞

散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 该函数将数据打乱混合…

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

Hash如何存数据 hash表的本质其实就是数组,hash表中通常存放的是键值对Entry。 如下图: 这里的学号是个key,哈希表就是根据key值来通过哈希函数计算得到一个值,这个值就是下标值,用来确定这个Entry要存放在哈希表中哪个位置。 H…

Hash碰撞

Hash碰撞 什么是Hash碰撞 Hash碰撞是指两个不同的输入值,经过哈希函数的处理后,得到相同的输出值,这种情况被称之为哈希碰撞。 例如:两个不同的对象(object1和object2的值)经过Hash函数计算后的&#xf…

浅谈“越权访问”

一:漏洞名称: 越权访问漏洞 描述: 越权访问,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者在获得低权限用户帐后后,可以利用一些方式绕过权限检查,访…

逻辑越权——垂直、水平越权

水平越权:通过更换的某个ID之类的身份标识,从而使A账号获取(修改、删除等)B账号数据。 垂直越权:使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作。 未授权访问&#xff1…

横向越权和纵向越权(水平越权、垂直越权)

越权:顾名思义,就是获得了本不应该有的权限。 我们都喜欢创造一些复杂的词汇,而实际上这些词就是一个代词,根本没有那么复杂。 越权漏洞往往是基于业务逻辑的漏洞,这样的漏洞很难被WAF保护。 越权的分类 按照方向…

越权访问

目录 概念 分类 pikachu--水平越权 源码分析 pikachu---垂直越权 源码分析 概念 越权访问(Broken Access Control,BAC)是web中一种常见的漏洞,且越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致的,所以越…

Web 攻防之业务安全:越权访问漏洞 测试.

Web 攻防之业务安全:越权访问漏洞 测试. 由于没有对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超级管理员)范围内的操作。(比如:通过更换的…

越权漏洞系列

0x01:越权的定义 越权漏洞是我们在测试过程中遇到比较多的漏洞,我们可以这样来理解越权漏洞,一个用户A一般只能够对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在信息进行增删改查时候进行用户判断&…