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

本文详细探讨了HashMap的数据存储方式,深入解析了哈希算法在HashMap中的应用,以及面对哈希冲突时,Java中HashMap如何通过开放寻址法和链地址法进行有效解决。通过对HashMap内部结构的分析,帮助读者理解哈希表的高效查找原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

总结 :
1. hashMap 存储数据 (key,value) 的时候使用 put 方法
2. put 方法会调用 putVal 方法 , hash(hey) 和当前的 key value 作为参数传进来
3. 判断数组是否为空,即判断是否是第一次添加数据 , 如果是的话,会先调用 resize 方法扩容
4. 之后 , 根据当前 key hash 值找到它在数组中的下标 ( 怎么算的 ? index = (n - 1) & hash) ,判断当前下标位置是 否已经存在元素
5. 如果不存在,直接把 key value 包装成 Node 节点作为链表头存入数组
6. 如果存在,分为三种情况
1. )比较一下已有数据和存入数据 如果 hash 值等于传过来的 hash ,并且他们的 key 值也相等 最后会把 value的值覆盖处理
2. )上一步不相等,就判断一下当前是不是红黑树结构,是则调用 putTreeVal() 把它加入到红黑树
3. )既不相等,也不是红黑树结构,说明是普通链表结构,遍历这个链表,将数据存到链表尾部
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值