HashMap的樹化因子為什麼是8

2021-10-06 15:17:16 字數 339 閱讀 9353

網上主流的答案:

紅黑樹的平均查詢長度是log(n),如果長度為8,平均查詢長度為log(8)=3,鍊錶的平均查詢長度為n/2,當長度為8時,平均查詢長度為8/2=4,紅黑樹的查詢效率更高,這才有轉換成樹的必要;

鍊錶長度如果是小於等於6,6/2=3,而log(6)=2.6,雖然速度也很快的,但是轉化為樹結構和生成樹的時間並不會太短

這個答案是從查詢效率的角度解釋的,這種解釋雖然有一定的合理性,但並不是設計者真正的想法

真正的原因——jdk設計者的解釋

摘自hashmap原始碼中的implementation notes.

HashMap為什麼樹化

在jdk1.8中,hashmap做了一些改變 jdk1.7中,發生雜湊碰撞時,將鍵值對新增到鍊錶頭部,jdk1.8是將鍵值對新增到鍊錶尾部。jdk1.8中,如果鍊錶的長度超過8,將會將鍊錶轉化為紅黑樹。容量的初始化 jdk1.7的hashmap在構造時會對容量進行初始化,而jdk1.8是在首次向ha...

為什麼hashMap的比例因子要0 75?

最近在看hashmap原始碼,對於擴容因子 0.75感到很費解,為什麼在用了75 的容量的時候就要進行擴容呢?陣列中明明還有25 的空間沒有使用。為什麼不等到陣列幾乎滿了 擴容因子 0.95 的時候才進行擴容?擴容因子 0.95和擴容因子 0.75有什麼區別嗎?首先來看一下什麼是擴容因子。假設has...

HashMap的負載因子為什麼不設定成1

為什麼hashmap的負載因子設定成0.75,而不是1也不是0.5?這背後到底有什麼考慮?在hashmap原始碼中 hashmap預設容量大小是16,最大容量是2的30次方,預設的負載因子是0.75f static final int default initial capacity 1 4 aka...