爲何HashMap中鏈表長度超過8會轉換成紅黑樹

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

緣由:效率

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

還有選擇6和8的緣由是:鏈表

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

相關文章
相關標籤/搜索