java程序員面試必備基礎知識:Map類源碼解析

一、Map接口的架構

Map接口的架構試圖如下:

java程序員面試必備基礎知識:Map類源碼解析

01.png

①SortedMap接口繼承Map接口,NavigableMap接口繼承SortedMap接口,TreeMap實現NavigableMap接口;

SortedMap:

java程序員面試必備基礎知識:Map類源碼解析

NavigableMap:

java程序員面試必備基礎知識:Map類源碼解析

TreeMap:

java程序員面試必備基礎知識:Map類源碼解析

②AbstractMap接口實現了Map接口,TreeMap同時也繼承了AbstractMap,HashMap和WeakHashMap繼承了AbstractMap;

AbstractMap:

java程序員面試必備基礎知識:Map類源碼解析

HashMap:

java程序員面試必備基礎知識:Map類源碼解析

WeakHashMap:

java程序員面試必備基礎知識:Map類源碼解析

③HashMap繼承了Dictionary,並且實現了Map接口:

java程序員面試必備基礎知識:Map類源碼解析

二、SortedMap、TreeMap、HashMap、HashTable的區別

1、SortedMap:是有序不可重複的,key值不可為空,value值可以為空;底層是TreeMap;線程不安全;

2、TreeMap:無序不可重複,key值不可為空,value值可以為空;底層是紅黑樹;線程不安全;

3、HashMap:無序不可重複;只有一個Key值可以為空,當key值為null的時候,其hashcode定為0,放在hash表的 第0個bucket中,value值可以為空;底層是Entry數組+鏈表+紅黑樹;線程不安全;

java程序員面試必備基礎知識:Map類源碼解析

4、HashTable:無序不可重複,Key值和Value值不能為空,底層是Entry數組+鏈表+紅黑樹;線程安全;

java程序員面試必備基礎知識:Map類源碼解析

三、HashMap的源碼解析

1、基本原理,HashMap的底層是由Entry數組+鏈表+紅黑樹構成,這樣設計的原理;當添加一個值計算出他的HashCode的時候,如果這個hashcode值已經存在,發生了hash碰撞,我們這裡使用拉鍊法來解決這個問題,即在已經存在的這個值後面拉出一個鏈表,但是當數據量非常大的時候,這個鏈表會非常長,當查詢一個值的話,會非常耗費時間,時間複雜度為O(n),因此在java1.8版本之後,當鏈表長度大於8的時候,會自動轉換為紅黑樹,當長度小於6的時候,又會從紅黑樹轉換為鏈表形態;

下面是添加的方法,同時還是HashSet的添加方法:

java程序員面試必備基礎知識:Map類源碼解析


分享到:


相關文章: