HashMap的扩容和树化边界

本文基于jdk1.8之后引入了红黑树

1.是否一定不存在长度大于等于8的链表

可以有

扩容条件:元素超过数组大小的75%

树化条件:桶下元素 ≥ 8 且数组长度 ≥ 64

可能加入元素后并没有到扩容的地步,但是某一个桶下面链表确实超了,这时就不会树化

2.扩容一定会导致某一个桶下面的链表打散吗?

只是大概率,但不是必然

(假如这批元素的hashCode对扩容后新数组的长度取模后刚好还落在同一个桶)

3.只有删除元素会导致树退化成链表吗?

扩容后如果树元素小于等于6则退化成链表

(扩容后这不是算是把所有节点重新安排了一遍吗,算是退化吗?

可以看看:HashMap扩容全流程-CSDN博客)

相关推荐
Wang's Blog8 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain9 小时前
C++转Java日记(03)
java·开发语言·c++
皮皮林5519 小时前
Java实现微信扫码登录
java
布莱克6059 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_67810 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋10 小时前
Rust 编程其实很简单
开发语言·rust
Yyyyyy~12 小时前
【Java】Day4Web基础知识
java·spring boot
MOONICK12 小时前
QT元数据
开发语言·qt
D e re k ZH12 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋13 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓