首先要說的是hashmap的底層資料結構是陣列+鍊錶的結構。hashmap中有乙個entry內部類,內部類有幾個屬性:key,value,hash,next。
hashmap中的陣列其實也就是entry陣列。
hashmap的初始容量是16,如果賦值初始容量的話,也是會自動變成2的冪這種大小的。
為什麼需要時2的冪?這是運算的簡便,為了使按位與和取模運算結果一致。
resize就是將容量擴大兩倍。同時還要將之前的值重新放到新的陣列和鍊錶的結構中
hashMap擴容機制
擴容時空間大小變化 hashmap中,雜湊桶陣列table的長度length大小必須為2的n次方 一定是合數 這是一種非常規的設計,常規的設計是把桶的大小設計為素數。相對來說素數導致衝突的概率要小於合數,具體證明可以參考 hashtable初始化桶大小為11,就是桶大小設計為素數的應用 hashta...
HashMap擴容機制
當map元素容量超過設定的閾值threshold capacity loadfactor時進行擴容,如下圖所示 原理 建立更大容量的新陣列,重新計算每個元素在新陣列中的位置進行遷移。缺點 每個元素需要重新計算hash 鍊錶中元素順序每次遷移後被倒置 原理 在擴充hashmap的時候,不需要像jdk1...
HashMap的初始容量機制及擴容機制
通常在我們的應用中,hashmap是用到最多的資料結構之一,在jdk1.8之前,它的底層結構是陣列 鍊錶,而在jdk1.8之後,為了查詢效率的優化 主要是當雜湊碰撞較多的時候 它的底層結構變成了陣列 鍊錶 紅黑樹。今天就來 一下hashmap的擴容機制,這也是面試時被問到最多的問題。首先看一下原始碼...