红黑树退化阈值设为6是综合性能、内存与稳定性权衡的结果:小规模下链表更轻量,6节点时查找效率相近但内存与维护成本更低;设为6可避免7↔8反复切换的抖动;6是支撑紧凑3层红黑树的最小临界点;且退化仅发生在resize迁移后节点≤6时。

红黑树退化为链表的阈值设为6,不是随意定的,而是综合性能、内存、稳定性三方面权衡的结果。
小规模下链表更轻快
当桶中只有6个节点时,链表平均查找需遍历3个节点,红黑树平均比较约2.6次(log₂6),两者效率几乎没差别。但红黑树每个节点要存父节点、左右子节点、颜色等字段,内存占用接近普通Node的两倍;插入删除还要做旋转、变色等操作,维护成本远高于链表的指针移动。
避免结构反复切换的抖动
如果退化阈值也设成8,那节点数从8减到7就得退化,加回1个又得立刻树化——这种“7↔8”来回横跳会频繁触发重建,徒增CPU和GC压力。设成6,就留出2个节点缓冲空间(8→6),让结构变更更有回旋余地。
支撑紧凑红黑树的最小临界点
一个3层满红黑树,去掉根节点所在数组槽位,第二层2个节点 + 第三层4个节点 = 正好6个数据节点。少于6个,树的高度优势难以体现;超过6后,链表性能衰减加快,树的优势才真正显现。
立即学习“Java免费学习笔记(深入)”;
退化只发生在扩容迁移时
日常的put或remove不会主动退化,只有在resize过程中,某个红黑树迁移后剩余节点≤6,才会批量untreeify。这个时机设计本身也降低了误判和冗余操作的概率。
不复杂但容易忽略。


















