Queue表明一種隊列集合 (java5新增)java
1、Set:不容許包含相同的元素,不能記住元素的添加順序
一、HashSet:按Hash算法來存儲集合中的元素,具備很好的存取和查找性能。
特色:
不能保證元素的排列順序
HashSet不是同步的,若是多個線程同時訪問一個HashSet,假設有兩個或者兩個以上的線程同時修改HashSet集合時,則必須經過代碼來保證其同步。
集合元素值能夠是null
當向HashSet集合中存入元素時,HashSet會調用該對象的hashCode()方法獲得該對象的hashCode值,而後根據該hashCode值決定該對象在HashSet中的存儲位置。
HashSet集合判斷兩元素相等的標準是兩個對象經過equals()方法比較相等,而且兩個對象的hashCode()方法值也相等。
子類:
LinkedHashSet,也是根據元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,這樣使得元素看起來是以插入的書序來保存的。因爲須要維護插入順序,效率相對於HashSet較低。
二、TreeSet:是SortedSet接口的惟一實現,能夠確保元素處於排序狀態。可是並非根據元素的插入順序進行排序,而是根據元素的實際值來進行排序。
TreeSet採用紅黑樹的數據結構對元素進行排序
三、EnumSet:是一個專門爲枚舉類設計的集合類,EnumSet中全部值都必須是指定枚舉類型的枚舉值。它的集合元素也是有序的,以枚舉值在Enum類內的定義順序來決定集合元素的順序。
EnumSet在內部以位向量的形式存儲,不容許加入null元素。
Set集合小結:
HashSet和TreeSet是Set的兩個典型實現,HashSet的性能老是比TreeSet好,由於TreeSet須要額外的紅黑樹算法來維護集合元素的次序。只有當須要一個保持排序的Set時,才應該使用TreeSet,不然都使用HashSet。
HashSet還有一個子類,LinkedHashSet,對於普通插入、刪除操做,LinkedHashSet比HashSet要略慢一些,這是由於須要維護鏈表所帶來的額外開銷形成。可是由於有鏈表的存在,遍歷LinkedHashSet會更快。
EnumSet是全部Set實現類中性能最好的,但它只能保存同一個枚舉類的枚舉值做爲集合元素。
Set的三個實現類HashSet、TreeSet、LinkedHashSet都是現場不安全的,若是是多線程環境,須要手動保證Set集合的同步性。算法
2、List:做爲Collection接口的子接口,能夠實現Collection接口中的所有方法。由於List是有序集合,所以list集合裏增長了一些根據索引來操做集合元素的方法
一、ArrayList和Vector
是兩個典型實現,徹底支持List接口的所有功能。。
ArrayList和Vector類都是基於數組實現的List類,因此ArrayList和Vector類封裝了一個動態再分配的Object[]數組,能夠經過capacity屬性來計算數組的長度。
Vector是一個古老的集合。除此以外,ArrayList是線程不安全的,而Vector是線程安全的。可是,實際上,即便須要保證List集合線程安全,一樣不推薦使用vector實現類。可以使用Collections工具類,將ArrayList變成線程安全的。
二、LinkedLList:它是一個基於鏈表實現的List,對於順序訪問集合中的元素進行了優化;特別是當插入、刪除元素時速度很是快,這是由於LinkedList既實現了List接口,也實現了Deque接口數組
3、Queue接口:用於模擬了隊列這種數據結構,隊列一般是「先進先出」的容器。
LinkedList也實現了Deque接口,Deque接口是Queue接口的子類,表明一個雙向隊列。包括pop出棧、push(入棧)
LinkedList與ArrayList、Vector的實現機制徹底不一樣,ArrayList和Vector內部以數組的形式來保存集合中的元素,所以隨機訪問集合元素上有較好的性能;而LinkedList內部以鏈表形式來保存集合中元素,所以隨機訪問能力較差,但在插入、刪除元素時性能很是出色。
PriorityQueue是一個比較標準的隊列實現類。PriorityQueue保存隊列元素的順序並非按加入隊列的順序,而是按照隊列元素的大小進行從新排序。
PriorityQueue不容許插入null元素,它還須要隊列元素進行排序。
4、Map:
用於保存具備映射關係的數據。Map接口有HashMap、LinkedHashMap、SortedMap、TreeMap、EnumMap等。此處與Set有類似之處。Map又與LIst存在類似之處:元素與元素之間能夠重複,每一個元素能夠根據索引查找。
一、HashMap和Hashtable實現類
它們都是Map接口的電箱實現類,它們之間的關係徹底相似於ArrayList和Vector的關係。
Hashtable是一個古老的Map實現類
區別:
Hashtable是一個線程安全的Map實現,但HashMap是線程不安全的實現,因此HashMap比Hashtable的性能高。
Hashtable不容許使用null做爲key和value,但H安徽省Map可使用null做爲key或value。
同HashSet集合不能保證元素的順序同樣,Hashtable、HashMap也不能保證其中key-value對的順序。
HashMap也有一個子類LinkedHashMap,也是使用雙向鏈表來維護key-value對的次序。LinkedHashMap須要維護元素的插入順序,所以性能略低於HashMap的性能。
二、SortedMap和TreeMap
Map派生出SortedMap子接口,SortedMap也有一個TreeMap實現類。 相似於TreeSet中判斷兩個元素相等的標準,TreeMap中判斷兩個key相等的標準也是兩個key經過equals比較返回true,而經過compareTo方法返回0,TreeMap即認爲這兩個key是相等的。
三、WeakHashMap:
與HashMap的用法基本類似,區別在於,HashMap的key保留對實際對象的強引用,意味着只有該HashMap對象不銷燬,該HashMap對象全部key所引用的對象不會被垃圾回收,HashMap也不會自動刪除這些key所對應的key-value對象;但WeakHashMap的key只保留對實際對象的弱引用,意味着若是該HashMap對象全部key所引用的對象沒有被其餘強對象引用變量所引用,則這些key所引用的對象可能被垃圾回收,也可能自動刪除這些key所對應的key-value對象。
Map小結:
HashMap和Hashtable的效率大體相同,由於它們的實現機制幾乎徹底同樣,但HashMap一般比Hashtable要快一點,由於Hashtable額外實現同步操做。
TreeMap一般比HashMap、Hashtable要慢,由於TreeMap須要額外的紅黑樹操做來維護key之間的次序。可是使用TreeMap的好處是,TreeMap中的key-value對老是處於有序狀態,無須專門進行排序操做。
LinkedHashMap比HashMap慢一點,由於它須要維護鏈表來保持Map中key的順序。IdentityHashMap性能沒有出色之處,跟HashMap基本相似,只是它使用==而不是equals來判斷元素相等。EnumMap的性能最好,但它只能使用同一個枚舉類的枚舉值做爲key。
安全