HashMap的put方法流程
2022-08-18 15:31:03 3 举报
put流程
作者其他创作
大纲/内容
判断添加完元素之后是否需要扩容
执行红黑树的插入并将返回值保存到变量e中
true
创建一个node节点赋值到对应的位置
将计算得到的hash值传入putVal方法
当前下标位置的元素是一个链表
font color=\"#e57373\
遍历链表指针后移
遍历链表判断下一个是不是null,如果是就插入当前新添加的元素
判断当前桶位置的节点的key跟要插入的是否相同
e不为null,说明只是要替换value值
哈希表结构改变的次数加1
先调用hash方法
当前这个链表元素的下一个节点的key是否跟要添加的元素的key相同
扩容
为null
进入putVal方法的流程
经过(n - 1) & hash计算得到的下标对应的位置上是否有元素
判断当前计算出的下标位置的元素是否是一个红黑树
将当前这个相同的节点保存到变量e中
不需要树化,此时e是null
false
循环回来,就是遍历链表
判断是否跟要插入的元素key相同
判断是否需要树化
需要
进行树化
e是否为null
不为null
进入扩容的流程
创建要给node节点将这个节点链到链表的末尾
此时e为null
table==null || table.length == 0
调用hash(key)方法对key的hashCode进行扰动计算得到它在HashMap中的hash值
返回null
不为null表示找到了key相同要替换的值,因为onlyIfAbsent为false,所以替换,替换完之后返回旧的值
判断当前桶位置的元素是不是红黑树
判断table是否初始化过了
判断对应的桶位置是否存放过元素
说明当前桶位置的元素是一条链表
判断当前计算出的下标位置的元素是否跟当前要添加的元素的key是否相同
当前这个链表元素的下一个节点是不是为null
0 条评论
下一页