java中Map和Set的底層分析

1.HashSet底層是使用HashMap實現的。當使用add方法將對象添加到Set當中時,實際上是將該對象作爲底層所維護的Map對象的key,而value則都是同一個Object對象(該對象我們用不上);其他的都是通過定義的HashMap對象實現的。

2.HashMap的底層,


loadFactor負載因子爲0.75,數據結構中的哈希表有關。通過散列函數也就是哈希函數計算。
table是一個Entry類型的數組,當需要的時候回重新調整大小,他的長度必須爲2的指數。默認生成一個長度爲16的Entry類型的數組。

3.Entry是HashMap的內部類,實現了Map.Entry接口,實現了他的方法。

4.HashMap底層維護一個數組,我們向HashMap中所放置的對象實際上是存放在該數組中。

5. 當向HashMap中put一對鍵值時,它會根據key的hashCode值計算出一個位置,該位置就是此對象準備往數組中存放的位置。

6. 如果該位置沒有對象存在,就將此對象直接放進數組當中;如果該位置已經有對象存在了,則順着此存在的對象的鏈開始尋找(Entry類有一個Entry類型的next成員變量,指向了該對象的下一個對象),如果此鏈上有對象的話,再去使用equals方法進行比較,如果對此鏈上的某個對象的equals方法比較爲false,則將該對象放到數組當中,然後將數組中該位置以前存在的那個對象鏈接到此對象的後面。

7.HashMap的內存實現佈局:


發佈了27 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章