【集合詳解】Java集合總結(中)-Map家族
接上文,本篇部落格我們接著談論有關集合的內容。
java所有的集合分成三大類。Set類似罐子,把一個物件新增到Set集合時,Set集合無法記住新增這個元素的順序,所以Set裡的元素不能重複。List集合非常想一個數組,可以記住每次新增元素的順序,且List的長度可變。Map集合也想一個罐子,只是它裡面的每個資料都有兩個值組成。
List根據索引訪問,Map根據Key訪問其value,Set只能根據本身訪問,所以不能重複。
Map家族
首先先看Map體系的繼承樹。
Hashtable 和 HashMap
①Hashtable是執行緒安全的Map實現,但HashMap執行緒不安全,即HashMap效能稍高一點。但多個執行緒訪問一個map物件時,用hashtable好。
②Hashtable不允許使用null作為key和value。否則會報錯“NullPointerException”。但HashMap可以使用null作為key(最多一個null),或Value(可有多個null)
效能分析
①Hashtable 和 HashMap相比儘管Hashtable 執行緒安全,但一般也會採用效能稍高一點的HashMap,並且需要保證執行緒安全時,可以結合工具類Collections.
PS:Collections類,提供了大量方法對集合元素進行排序,查詢,和修改等操作。還提供了將集合物件設定為不可變,對集合物件實現同步控制等方法。
②TreeMap比HashMap和HashTable慢(尤其是插入和刪除),因為TreeMap底層採用紅黑樹管理key-value對。但用TreeMap使物件總是處於有序狀態,也是其優勢。
③LinkedHashMap比HashMap慢一點,因為它需要維護連結串列來保持map中的key-value時的新增順序。IdentityHashMap效能沒有特別出色的地方,與hashmap基本相似的實現。只是它使用的==而不是equals()來判斷元素相等。EnumMap效能最好,但只能使用同意而列舉類的列舉值作為key。
總結:
本文主要總結了Java集合中map家族。以及部分map實現類的使用場景和其效能對比。至於Map的Hash演算法,雖然部落格中沒有提到,但對於理解其他基於hash的實現類都很有幫助。