HashMap详解

线程不安全的,继承AbstractMap,实现Map接口

key和value都可以为null

数据结构(jdk1.8):数组+链表/红黑树

扩容因子默认为0.75

初始容量为16

扩容时容量值:是当前容量的2倍,即2capacity

扩容后新阈值:扩容因子*容量

获取元素索引:路由寻址法(计算公式:hash&(table.length-1))

转化红黑树的条件:链表长度>8,且表的长度>64

put加入节点后才会进行初始化,put时存在多种情况:

  • HashMap为null,扩容,初始化
  • HashMap不为null,判断hash值是否冲突
    • 不冲突,直接插入到数组中对应位置
    • 冲突,判断是链表,还是树
      • 链表,for遍历,key相等,替换value和next
      • 链表,for遍历,key不相等
        • <=8直接插入
        • >8进入树化方法(表的长度<64,扩容)

put加入节点后,发现size(键值对数量)>threshold时,进行扩容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值