为什么Map桶中个数超过8才转为红黑树
生活随笔
收集整理的這篇文章主要介紹了
为什么Map桶中个数超过8才转为红黑树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
直白一點:就是trade-off,空間和時間上的權衡!
源碼中有如下內容:
當hashCode離散性很好的時候,樹型bin用到的概率非常小,因為數據均勻分布在每個bin中,幾乎不會有bin中鏈表長度會達到閾值。但是在隨機hashCode下,離散性可能會變差,然而JDK又不能阻止用戶實現這種不好的hash算法,因此就可能導致不均勻的數據分布。不過理想情況下隨機hashCode算法下所有bin中節點的分布頻率會遵循泊松分布,可以看到,一個bin中鏈表長度達到8個元素的概率為0.00000006,幾乎是不可能事件。所以,之所以選擇8,是根據概率統計決定的。
還有另一種說法是:
紅黑樹的平均查找長度是log(n),如果長度為8,平均查找長度為log(8)=3,鏈表的平均查找長度為n/2,當長度為8時,平均查找長度為8/2=4,這才有轉換成樹的必要;鏈表長度如果是小于等于6,6/2=3,而log(6)=2.6,雖然速度也很快的,但是轉化為樹結構和生成樹的時間并不會太短。貌似有點道理,但其實,小于6這個閾值,是為了防止當紅黑樹的結點從8個減為7個時,又得換成鏈式結構而造成對table表的頻繁操作。試問3相比4有轉換的必要,而2.6相比3就沒有轉換的必要?所以閾值取8是時間和空間上的綜合權衡。
總結
以上是生活随笔為你收集整理的为什么Map桶中个数超过8才转为红黑树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021快手短剧数据报告
- 下一篇: 2021年自驾游数据报告