1. 程式人生 > >為什麼HashMap中連結串列長度超過8會轉換成紅黑樹

為什麼HashMap中連結串列長度超過8會轉換成紅黑樹

開發十年,就只剩下這套架構體系了! >>>   

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左右徘徊,就會頻繁的發生樹轉連結串列、連結串列轉樹