1. 程式人生 > >(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹

(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹

假設 n) net hashmap 頻繁 發生 等於 pan tails

原博地址:https://blog.csdn.net/xingfei_work/article/details/79637878

HashMap在jdk1.8之後引入了紅黑樹的概念,表示若桶中鏈表元素超過8時,會自動轉化成紅黑樹;若桶中元素小於等於6時,樹結構還原成鏈表形式。

原因:

  紅黑樹的平均查找長度是log(n),長度為8,查找長度為log(8)=3,鏈表的平均查找長度為n/2,當長度為8時,平均查找長度為8/2=4,這才有轉換成樹的必要;鏈表長度如果是小於等於6,6/2=3,雖然速度也很快的,但是轉化為樹結構和生成樹的時間並不會太短。

還有選擇6和8的原因是:

  中間有個差值7可以防止鏈表和樹之間頻繁的轉換。假設一下,如果設計成鏈表個數超過8則鏈表轉換成樹結構,鏈表個數小於8則樹結構轉換成鏈表,如果一個HashMap不停的插入、刪除元素,鏈表個數在8左右徘徊,就會頻繁的發生樹轉鏈表、鏈表轉樹,效率會很低。

(轉)為什麽HashMap中鏈表長度超過8會轉換成紅黑樹