侧边栏壁纸
博主头像
毕发胖博主等级

沉默会被理解为赞同

  • 累计撰写 8 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

HashMap的Put过程

毕发胖
2022-03-20 / 0 评论 / 2 点赞 / 755 阅读 / 557 字
温馨提示:
本文最后更新于 2022-03-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

HashMap的Put过程

第一张.png
这里通过看源码我们发现,当用户先传过来一个键跟第二张.png值,put方法会先计算key的哈希值(就是存储位置),计算完后会把计算好的键跟键与值交给putVal方法中,在这里面进行存储

进入到putVal方法中后,会判断Node数组是否为空,就简单来说,你整个hash表的数组不能为空,如果为空,那么就会走扩容算法resize()方法,然后将新扩容的长度赋值给现在的数组
此时我们看回来
第三张.png
接下来就开始计算下标了,
最后一张.png
注意此时i存的就是下标了,此时判断i是否有数据
如果没有

那么就直接调用newNode方法存入这个下标
插入完成后,增加修改次数,然后判断size是否到达75%,如果到了,就调用reisze()方法扩容,没到的话就直接结束。

如果

会首先判断这个key是否存在,如果存在新值覆盖老值,然后继续增加修改次数,然后判断size是否到达75%,如果到了,就调用reisze()方法扩容,没到的话就直接结束。
如果这个Key不存在,会判断是否是树节点,如果就用红黑树直接插入,如果不是就代表是链表,接下来遍历链表的长度,判断是否长度大于或等于8,如果是,转换为红黑树插入,如果不是,用链表插入,然后继续增加修改次数,然后判断size是否到达75%,如果到了,就调用reisze()方法扩容,没到的话就直接结束。

2

评论区