面试题 - Java8的HashMap put的流程

2020-03-31  本文已影响0人  天命ming

流程图

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;
上一篇下一篇

猜你喜欢

热点阅读