HashMap为什么要先插入再扩容JDK1.8

本文探讨了JDK1.8中HashMap为何选择先插入后扩容而不是先扩容后插入。主要原因是避免红黑树与链表之间因插入扩容导致的频繁转变,从而提高性能。通过分析不同扩容时机对红黑树和链表结构的影响,得出先扩容再插入可能导致更高的频繁转变概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK1.8开始HashMap为什么要先插入后扩容,网上查找有说先扩容再插入可以少遍历之类的,其实不管是先扩容还是先插入,它的原则还是尾插法都是避免不了要遍历的,那它为什么还是要先插入呢,只要看插入逻辑和扩充逻辑做了哪些操作就知道了

在这里插入图片描述

以下只是个人的理解,如有错误欢迎指点

近几个月收集了收集了N份精校过的PDF版的Java八股文大全,涉及Java后端的方方面面,分享给大家。希望能帮助到大家面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

看这里: 直接获取方式点我

文档版,如下图:
在这里插入图片描述

首先看下JDK1.8 HashMap插入的源码

1:插入操作如果数组中的节点是红黑树是往节点中插入节点, 如果是链表的时候可能会要从链表升级成红黑树,似乎先插入再扩容还是先扩容后插入都是没影响的都是要遍历, 那问题原因就在扩容机制里

else if (p instanceof TreeNode)
    e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
else {
   
    for (int binCount = 0; ; ++binCount) {
   
        if ((e = p.next) == null) {
   
            p.next = newNode(hash, key, value, null);
            /**
            *  这里要满足当前链表的长度>=7,遍历是从根节点开始,因此相当于包括
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值