千鋒教育Java入門全套視頻教程(java核心技術(shù),適合java零基礎(chǔ),Java

hashmap原理分析:
內(nèi)部結(jié)構(gòu)為一個數(shù)組還有一個鏈表。其中數(shù)組用來作為分類桶,即不同的hash值會映射到某個相應(yīng)桶里,然后在桶里尋找是否有hash值相同并且key相同的沖突對象,然后進行替換或者加入到鏈表末尾。事實上當(dāng)鏈表長度達到一定值時,會進行紅黑樹化。接下來進行細節(jié)說明。
hashmap要求數(shù)組容量為2的n次方,當(dāng)用戶在構(gòu)造函數(shù)中所寫入的值不滿足時,會擴大為滿足條件的最小值,用戶指定時默認為16。用戶還可以指定閾值因子,默認0.75,該因子乘以容量得到閾值,當(dāng)總存入的節(jié)點達到閾值時會將容量擴大一倍。
對象的hash值映射到桶里的算法是先hash=hash^(hash>>>16);然后hash值&上(數(shù)組容量-1),得到的值便是對于與數(shù)組上的位置。
當(dāng)一個鏈表上的長度達到9時,會在數(shù)組容量大于64時將該鏈表轉(zhuǎn)化為紅黑樹,否則進行容量擴充一倍。
標(biāo)簽: