Map 家族

Map 實現類 線程安全否 自然排序 Key的底層結構

Key是否可爲null

特性
HashMap 無序 數組+(鏈表或者紅黑樹)

hash(null) = 0;

因此,map.get(null) 是有值的

查詢快,O(1)
TreeMap 迭代時中序遍歷,按自然順序排序(按ASCII排序,即按Key的HashCode排序) 紅黑樹 否(沒做 null 判斷) 查詢快,有序O(lgN)
LinkedHashMap

按查詢順序排序;

按訪問順序排序;(設置AceessOrder = True)

數組

鏈表

+(鏈表或紅黑樹)

hash(null) = 0

Linked保證迭代的順序;

Hash保證單次訪問速度

HashTable 無序 數組

(有判定不能爲null key)

線程安全,但效率低
ConcurrentHashMap 無序 數組 + (鏈表或者紅黑樹)

(有判定不能爲null key 或者 value)

線程安全,CAS實現樂觀鎖。
ConcurrentSkipHashMap

可自定義排序;

按自然順序排序(按ASCII排序,即按Key的HashCode排序)

按自然順序倒序排序;

默認按自然排序

數組 + (鏈表或者紅黑樹)

(有判定不能爲null key)

線程安全,CAS實現樂觀鎖;

有序,且可以自定義排序

           

1,思考:爲什麼線程安全的集合都不允許插入null key 或者 null value?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章