java.util.Collection包 java集合框架總結
java.util.Collection
java.util.Collection(以下簡稱Collection)的子介面有List Set Queue,他們各自都有一個抽象實現類AbstractCollection、AbstractList、AbstractSet、AbstractQueue,而AbstractList、AbstractSet、AbstractQueue同時又是繼承AbstractCollection的。這些抽象類實現了Collection、List、Set、Queue介面的部分方法。
List
List介面的最終實現由ArrayList、LinkedList、Vector,其中:
ArrayList
ArrayList繼承了AbstractList,實現了List介面,內部是一個數組
Vector
Vector只是把ArrayList的方法前加了個synchronized
LinkedList
LinkedList繼承了AbstractSequentialList,AbstractSequentialList了繼承AbstractList,實現了List介面,內部是一個連結串列。另外,LinkedList也實現了Deque介面,意味著它也是個雙向佇列,這個就跟下面的Queue介面有交叉了。 可以注意到,ArrayList核Vector都實現了RandomAccess介面,這個介面只是個標記,比如標記ArrayList和Vector可以通過下標快速get到元素,因為他們是通過陣列實現的,這樣在使用演算法時可以針對資料採用更快的演算法,而不是跟LinkedList一樣的演算法。
Queue
最終實現由ArrayDeque、LinkedList、PriorityQueue
ArrayDeque
ArrayDeque是陣列實現的雙線佇列,它先實現了Deque介面,而Deque介面又實現了Queue介面
LinkedList
LinkedList既是一個List又是一個Deque
PriorityQueue
與ArrayDequeue不同,PriorityQueue僅僅繼承了AbstractQueue,並沒有顯式的實現Queue介面,但是AbstractQueue是實現Queue介面的,PriorityQueue繼承了它,也就同時實現了Queue介面,只不過沒有顯式的再實現一次,不知為何,ArrayList要多此一舉,繼承了AbstractList又實現List介面,命名AbstractList已經實現過了。
Set
最終實現類HashSet、LinkedHashSet、TreeSet、EnumSet(很少用,忽略)
HashSet
HashSet實現了Set介面,實際上是一個HashMap(僅用到看key,value會用一個Dummy的Object),HashSet每次迭代時的順序可能會不一樣,允許null,HashSet的所有方法都是直接呼叫HashMap,沒額外處理,沒什麼可說的,理解了HashMap就明白了。
LinkedHashSet
LinkedHashSet繼承了HashSet,重寫了構造方法,在構造方法中建立HashMap時使用LinkedHashMap而不是HashMap。
TreeSet
先看兩個介面
SortedSet介面
SortedSet介面,字面上理解可排序的集合,實現了該介面的集合在進行迭代時可以排序,順序按照自然排序或按照在建立集合指定的比較器排序。 需要注意,插入到SortedSet集合中的元素必須實現Comparable介面或能被指定的比較器比較(不能丟擲ClassCastException),否則在使用這樣的集合時可能會丟擲ClassCastException。 因為可以排序,所有SortedSet介面比Set介面多了一些比如first()、last()、subSet之類的方法。 同SortedSet對應的有SortedMap
NavigableSet介面
NavigableSet介面,是對SortedSet的進一步完善及擴充。 對於一個支援排序的集合(實現了SortedSet介面)來說,可以獲取第一個first()、最後一個last()等時很常見的需求,但是慢慢的我們發現這些還不夠,比如我想獲取小於某個元素的所有元素,SortedSet裡沒有直接的方法,雖然可以用subSet(e,last())實現,在比如我想在subSet時指定包含或不包含邊界元素,這個SortedSet是無法實現的,綜合這些需求才出現了NavigableSet介面,裡邊有lower(E)、floor(E)、descendingSet(返回一個顛倒順序的心集合)等方法。 同NavigableSet對應的有NavigableMap
TreeSet
那麼TreeSet就是以上SortedSet、NavigableSet介面的實現了。 TreeSet是靠TreeMap實現的,跟HashSet類似