Java7 HashMap源码阅读总结

put()方法

  1. 计算key的hash值
  2. 通过hash值找到对用的下标
  3. 如果该下标不为空,检查是否有重复的 key 存在,如果有则覆盖(hash相同,key相同==、equals)
  4. 不存在重复的 key,将此 entry 添加到数组中
    (1) 检查扩容:已经达到了阈值 && 位置已经有元素
    a. 扩容:新建一个数组,长度是原来的2倍
    b. 转移:rehash把原数组元素放入到新数组中
    (2) 插入新值(1.7头插法)

get()方法

  1. 计算key的hash值
  2. 通过hash值找到对用的下标
  3. 通过下标找到链表,遍历链表找到对应的值(hash相同,key相同==、equals)

多线程问题:rehash时会产生循环链表,导致get()方法出现死循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值