乙個是鍊錶長度到8,乙個是陣列長度到64.
上圖所示是判斷鍊錶長度到達8呼叫treeifybin方法轉換紅黑樹,treeify_threshold的值為8 ,treeify_threshold-1=7,所以bincount >=7時呼叫treeifybin方法
上圖所示是treeifybin的方法**,開頭有判斷陣列長度是否小於64,小於則進行擴容,否則轉紅黑樹.min_treeify_capacity的值為64.
2.當bincount=0,put的第2個元素,bincount 1對應put的第3個元素,1對以此類推,當bincount=7時此時put的是第9個元素,而上面的已經說了bincount >=7時呼叫treeifybin方法,所以鍊錶長度是要超過8
2.詳細的解釋可以看下面**的注釋
/*haskmap putval 原始碼 put ele1,ele2...ele8,ele9*/
final v putval(int hash, k key, v value, boolean onlyifabsent,
boolean evict)
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
p = e;
}} .....後面**省略
}
HashMap底層資料結構之鍊表轉紅黑樹的具體時機
1 從hashmap中有關 鍊錶轉紅黑樹 閾值的宣告 2 重點 解析hashmap.put k key,v value 的原始碼 3 測試 hashmap中有關 鍊錶轉紅黑樹 閾值的宣告 使用紅黑樹 而不是鍊錶 來存放元素。當向至少具有這麼多節點的鍊錶再新增元素時,鍊錶就將轉換為紅黑樹。該值必須大於...
關於紅黑樹,在HashMap中是怎麼應用的?
前言 在閱讀hashmap原始碼時,會發現在hashmap中使用了紅黑樹,所以需要先了解什麼是紅黑樹,以及其原理。從而再進一步閱讀hashmap中的鍊錶到紅黑樹的轉換,紅黑樹的增刪節點等。什麼是紅黑樹?在hashmap中是怎麼應用的?紅黑樹 英語 red black tree 是一種自平衡二叉查詢樹...
樹的直徑(兩個bfs)
樹的直徑 樹中的最長鏈 具體思路 隨便找乙個點bfs,然後找到最長的鏈,然後再以找到的點作為起點進行bfs,然後找到的最長的鏈就是樹的直徑。ac include include include include include include include include include inclu...