ConcurrentHashMap 的紅黑樹
1、紅黑樹
紅黑樹是一種特殊的二叉樹,主要用它存儲有序的數據,提供高效的數據檢索,時間複雜度爲O(lgn),每個節點都有一個標識位表示顏色,紅色或黑色,有如下5種特性:
每個節點要麼紅色,要麼是黑色;
根節點一定是黑色的;
每個空葉子節點必須是黑色的;
如果一個節點是紅色的,那麼它的子節點必須是黑色的;
從一個節點到該節點的子孫節點的所有路徑包含相同個數的黑色節點;
只要滿足以上5個特性的二叉樹都是紅黑樹,當有新的節點加入時,有可能會破壞其中一些特性,需要通過左旋或右旋操作調整樹結構,重新着色,使之重新滿足所有特性。
2、ConcurrentHashMap紅黑樹實現
在1.8的實現中,當一個鏈表中的元素達到8個時,會調用treeifyBin()方法把鏈表結構轉化成紅黑樹結構。
並非一開始就創建紅黑樹結構,如果當前Node數組長度小於閾值MIN_TREEIFY_CAPACITY,默認爲64,先通過擴大數組容量爲原來的兩倍以緩解單個鏈表元素過大的性能問題。