下载桌面端
进入网页版

登录/ 注册

万兴科技(300624.SZ)集团成员

Java_HashMap_put方法流程图

立即使用

put(K key, V value)调用putVal1. 计算Hash值putVal(hash(key), key, value, false, true)当前数组是否为空Yes调用resize()初始化数组2. 判断数组是否为空计算索引i = (n - 1) & hash取出结点:p = tab[i]No3. 取出key所在位置结点计算key的索引,取出相应位置的结点p==nullYes直接赋值比较节点p的key: p.key == key4. 判断p是否为空如果为空,那么直接赋值,结束Yeskey已经存在,将p赋值变量 e = p结点p属于链表还是红黑树6. 冲突处理如果key不存在,则根据是链表还是红黑树处理调用putTreeVal【插入】结点到红黑树返回结果赋值给变量e1. 如果当前key存在链表中,返回该节点给e;NoNo链表2. 如果key不在链表中,则插入到链表尾部,返回e=null3. 如果链表满足条件,则变成红黑树1. 若当前key存在红黑树中,返回该节点给e红黑树2. 如果key不存在红黑树中,则插入到合适位置,返回e=null3. 如果红黑树满足条件,则转化为链表得到变量 e5. 比较p节点的key值如果key已经存在;赋值给变量:e = pe==null++modCount;!onlyIfAbsent || oldValue == null覆盖旧值,返回oldValue旧值++size并判断是否扩容旧值处理策略允许覆盖旧值 或者 旧值=nullYesNo返回null
14
0
0
发布时间: 2021-05-18