面试题 - Java8的HashMap put的流程

流程图

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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容