ConcurrentHashMap 轉換紅黑樹過程

2021-10-13 12:58:44 字數 1252 閱讀 3003

某個節點的鍊錶長度大於等於 8

if

(bincount >= treeify_threshold)

如果陣列長度小於64 就會擴容,否則轉換成紅黑樹

if

((n = tab.length)

< min_treeify_capacity)

/**

* hd記錄原來鍊錶的乙個節點

*/concurrenthashmap.treenode

hd = null;

/** * tl 記錄上乙個鍊錶節點

*/concurrenthashmap.treenode

tl = null;

/** * 遍歷節點下的鍊錶

*/for(concurrenthashmap.node

e = b; e != null; e = e.next)

這個就看不明白了

static

final

void

settabat

(node

tab,

int i, node

v)

treebin

(treenode

b)else}}

}this

.root = r;

assert

checkinvariants

(root)

;}

public

static

class

stringover

stringover

(string name)

@override

public

boolean

equals

(object anobject)

@override

public

inthashcode()

}

public

static

void

main

(string[

] args)

}

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...