树化的意义:
红黑树用来避免 DoS 攻击,防止链表超长时性能下降,树化应当是偶然情况,是保底策略。
hash 表的查找,更新的时间复杂度是 $O(1)$,而红黑树的查找,更新的时间复杂度是 $O(log_2n )$,TreeNode 占用空间也比普通 Node 的大,如非必要,尽量还是使用链表。
hash 值如果足够随机,则在 hash 表内按泊松分布,在负载因子 0.75 的情况下,长度超过 8 的链表出现概率是 0.00000006,树化阈值选择 8 就是为了让树化几率足够小。
树化规则:
当链表长度超过树化阈值 8 时,先尝试扩容来减少链表长度,如果数组容量已经 >=64,才会进行树化。
退化规则:
情况1:在扩容时如果拆分树时,树元素个数 <= 6 则会退化链表。
情况2:remove 树节点时,若 root、root.left、root.right、root.left.left 有一个为 null ,也会退化为链表。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/254045.html