HashMap之Hash碰撞

article/2025/11/11 2:38:32

详细理解了Hash碰撞及处理方法

为什么会出现hash碰撞

在hash算法下,假设两个输入串的值不同,但是得到的hash值相同, 即会产生hash碰撞

一个很简单的例子:

假设你自己设计了一个计算hash的算法toHashValue(String). 是取的输入值的Unicode编码值(当然实际的情况会比这复杂很多很多)

那么 toHashValue('A'+'D')  得到的unicode 与 toHashValue('B'+'C')  相等.  所以产生了hash碰撞.

因为AD跟BC我存的实际的值并不一样, 不能做覆盖, 所以就需要解决hash碰撞.

 

解决hash碰撞

JAVA里一般用的是链表法

以hashMap为例:

hashMap的底层结构是一个数组加链表式的结构, 可以理解为key的hash值放在数组里, value放在链表里,

当出现hash碰撞时,即key的hash值相同,那么新添加的这个值会在该元素下的链表的value后面添加一个元素.

用get() 方法取到该hash值后,需要遍历所有的链表, 取出与key值对应的value

但是问题来了, 最坏最坏的情况下, 假设你不停插入的key的hash值都是同一个,那么这个数组+链表的结构就会退化成单头数组+长链表的这种结构,而每次查询都是要遍历所有链表值的,效率就会大大降低. 于是这时候提出了红黑树的概念

当链表的长度大于8时,会转化成红黑树,效率会大大提升.ps.红黑树是一个平衡二叉树, 如果有想了解这块的同学,可以单独搜下,此处不再赘述.

参考了两位大佬的文章

----------------侵删------------------

https://www.jianshu.com/p/379680144004

https://blog.csdn.net/qq_35583089/article/details/80048285


http://chatgpt.dhexx.cn/article/NTPpnObl.shtml

相关文章

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一般只能够对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在信息进行增删改查时候进行用户判断&…

java越权问题

关于java项目越权问题 问题描述实现思路具体代码 项目上线前做了安全扫描,安全部门扫描出一个关于越权的问题。这个问题是在刚开始开发接口的时候没有考虑到的一个事情。(此项目是有关于用户所拥有的项目和活动权限的问题。) 问题描述 首先…

越权 漏洞

一、越权漏洞描述 越权访问(Broken Access Control,简称 BAC)是 Web 应用程序中一种常见的漏洞,由于其存在范围广、危害大,被 OWASP 列为 Web 应用十大安全隐患的第二名。 该漏洞是指应用在检查授权时存在纰漏&#x…

详解越权漏洞

文章目录 1.1. 漏洞原理1.2. 漏洞分类1.2.1. 水平越权1.2.2. 垂直越权 1.3. 漏洞举例1.3.1. 水平越权1.3.2. 垂直越权 1.4. 漏洞危害1.5. 修复建议 1.1. 漏洞原理 越权漏洞是指应用程序未对当前用户操作的身份权限进行严格校验,导致用户可以操作超出自己管理权限范…

网络安全笔记 -- 逻辑越权(水平垂直越权)

1. 逻辑越权 越权: 水平越权、垂直越权登录 暴力破解本地加密传输Cookie脆弱Session劫持密文对比认证 业务: 订单ID、手机号码、用户ID、商品ID等数据: 支付篡改、数量篡改、请求重放等找回: 客户端回显、Response状态值、Sessio…

渗透测试-越权漏洞之垂直越权和水平越权

越权漏洞之垂直越权和水平越权 文章目录 越权漏洞之垂直越权和水平越权前言一、什么是越权漏洞以及漏洞产生的原因1. 什么是越权漏洞2. 漏洞产生的原因 二、水平越权和垂直越权以及防御方法1.水平越权和垂直越权2.越权漏洞的防御方法 总结 前言 一、什么是越权漏洞以及漏洞产生…

【web安全】——逻辑漏洞之越权漏洞

作者名:Demo不是emo 主页面链接:主页传送门创作初心:一切为了她座右铭:不要让时代的悲哀成为你的悲哀专研方向:网络安全,数据结构 每日emo:希望我失望的日子过的快些 目录 一.越权漏洞简介 二…

怎样进行越权测试?

要了解越权测试,首先要先了解什么是越权攻击。越权攻击顾名思义就是超越了自己的权限范围,是指用户通过某种方式获取到了不属于自己的权限。越权攻击分为水平越权和垂直越权。下面我们先来说一下水平越权水平越权:攻击者尝试访问与他权限相同…

越权漏洞

什么是越权漏洞? 越权漏洞指的是应用在检查授权时存在纰漏,可以让攻击者获得低权限用户账户后,利用一些方式绕过权限检查,可以访问或者操作其他用户或者更高权限,而越权漏洞是属于业务性漏洞,困难在于这类…

水平越权与垂直越权

文章目录 越权漏洞简介水平越权概念常见场景实例 垂直越权概念常见场景实例 越权漏洞简介 越权,顾名思义,就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这…

水平越权垂直越权

#知识点: 1、水平越权-同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证&脆弱验证 4、脆弱验证-Cookie&Token&Jwt等 解释 水平越权 就是同级用户之间的越权,打个比方现在有ABC三个用户,A…