美文网首页
面试题 - Java8的HashMap put的流程

面试题 - Java8的HashMap put的流程

作者: 天命ming | 来源:发表于2020-03-31 10:02 被阅读0次

    流程图

    HashMap - put 流程图.jpg

    流程

    1. hash(key)。对key.hashCode高位与运算
    2. 如果tab数组为空,进行resize()操作
    3. 计算tab索引位置是否有值;没有值,直接插入;然后++modCount++size操作。在判断 tab.size > threshold,大于则resize()结束
    4. 判断hash是否相等 && 调用equal()判断key是否相等;相同,则更新原值后调用afterNodeAccess;结束
    5. 不相等,如果是红黑树,则红黑树插入
    6. 如果是链表,则链表插入;插入后如果长度大于8,链表转化为红黑树
    7. 插入后,再次判断 key 是否相等;相等,更新原值后调用afterNodeAccess;结束
    8. 不相等,则++modCount++size操作。在判断 tab.size > threshold,大于则resize()
    9. 结束

    伪代码

    if (tab数组为空) {
        resize();
    }
    if (hash值对应索引位置为空) {
        链表插入;
    } else {
        if (key相等) {
            // 结束if;
        } else if (红黑树) {
            红黑树插入;
        } else {
            链表插入;
            长度大于8,转化为红黑树;
        }
        if (key 相等) {
            更新value;
            afterNodeAccess();
            return oldValue;
        }
    }
    ++modCount;
    if (++size > threshold) {
        resize();
    }
    afterNodeInsertion();
    return null;
    

    相关文章

      网友评论

          本文标题:面试题 - Java8的HashMap put的流程

          本文链接:https://www.haomeiwen.com/subject/xqniuhtx.html