1. 程式人生 > 其它 >JDK1.8之後,HashMap轉變紅黑樹

JDK1.8之後,HashMap轉變紅黑樹

技術標籤:基礎知識java演算法

當連結串列長度大於8並且陣列長度大於64時,才會轉換為紅黑樹

根據原始碼註釋:
1.TreeNodes佔用空間是普通Nodes的兩倍
只有當bin(bin就是bucket-桶,即HashMap中hashCode值一樣的元素儲存的地方)包含足夠多的節點時才會轉成TreeNodes,而是否足夠多就是由TREEIFY_THRESHOLD的值決定的。當bin中節點數變少時,又會轉成普通的bin。

2.根據泊松分佈計算概率
當hashCode離散性很好的時候,樹型bin用到的概率非常小,因為資料均勻分佈在每個bin中,幾乎不會有bin中連結串列長度會達到閾值。但是在隨機hashCode下,離散性可能會變差,然而JDK又不能阻止使用者實現這種不好的hash演算法,因此就可能導致不均勻的資料分佈。不過理想情況下隨機hashCode演算法下所有bin中節點的分佈頻率會遵循泊松分佈。

作者還給出了泊松分佈的公式,這裡取 λ=0.5
在這裡插入圖片描述

 * 0:    0.60653066
 * 1:    0.30326533
 * 2:    0.07581633
 * 3:    0.01263606
 * 4:    0.00157952
 * 5:    0.00015795
 * 6:    0.00001316
 * 7:    0.00000094
 * 8:    0.00000006
 * more: less than 1 in ten million

可以看到,連結串列長度達到8個元素的概率為0.00000006,幾乎是不可能事件