HashMap.put() 流程
2022-01-15 16:15:18 0 举报
面试-HashMap put 方法的详细流程
作者其他创作
大纲/内容
否
没有值
for (int binCount = 0; ; ++binCount) p = e;
链表遍历插入
新值直接插入链表的最后一个节点
结束
链表转为红黑树插入数据
新值直接插入红黑树节点
resize();
是否需要扩容
是
if ((p = tab[i = (n - 1) & hash]) == null)
判断链表的长度是否大于8
没有下一个节点
if ((e = p.next) == null)
e = p;
开始
新值直接覆盖旧值
进行扩容
判断key的值是否一样
if ((tab = table) == null || (n = tab.length) == 0)
进行hash分析,看命中的桶位置,是否已经存在有值
else if (p instanceof TreeNode)
if (p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k))))
判断是否为树节点
n = (tab = resize()).length;
判断链表的节点还有没有下一个节点
if (++size > threshold)
判断table是否为空或者长度为0
直接保存插入数据
有值
0 条评论
下一页