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

本文详细探讨了HashMap的数据存储方式,深入解析了哈希算法在HashMap中的应用,以及面对哈希冲突时,Java中HashMap如何通过开放寻址法和链地址法进行有效解决。通过对HashMap内部结构的分析,帮助读者理解哈希表的高效查找原理。
摘要由CSDN通过智能技术生成
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. )既不相等,也不是红黑树结构,说明是普通链表结构,遍历这个链表,将数据存到链表尾部
1.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值