HashMap插入和扩容机制

  • put
    • 判断插入的key是否有hash冲突
    • e != null hash冲突进行值覆盖
  • resize 扩容 大于初始容量*负载因子时触发
    • 拷贝数组
      rehash 把数据放回table, 如果存在链表(e.next!= null), 遍历链表重新在尾结点插入
      rehash 并发安全问题出在:newTab[e.hash & (newCap - 1)] = e; 如果计算出来的index刚好是环形链表的下标是,成环,导致死循环
      解决方法: 初始化时尽量指定好要插入的最大容量,避免扩容
全部评论

相关推荐

10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务