難得這幾天都比較閒,所以有時間弄弄博客。剛好在忘了集合的那些繼承關係,就順便整理了一下,而我們平時常見的List,Set,Map,Queue等都有着對應的繼承體系。這裏只列舉了所用的抽象類和常見的實現類,畢竟實現類真的列舉起來就沒完沒了。
抽象類繼承關係
如下圖所示,List,Set和Queue類型的集合都是有着自己對應的AbstractList,AbstractSet和AbstractQueue基類,而這三個基類都繼承自AbstractCollection
這裏我們發現,說好的Map呢?別急,Map的繼承體系在這
那AbstractMap就是平時我們接觸的那些Map的基類嗎,對,這裏一點質疑都不需要,就是這樣的。Map和Collection是相對的兩個集合體系
public abstract class AbstractMap<K,V> implements Map<K,V> {...}
public abstract class AbstractCollection<E> implements Collection<E> {...}
這裏我們要問下,我們平時做面試題的時候會碰到跟HashMap比較的HashTable是什麼?那在這裏說明下,HashTable屬於Map的體系,但是其基類並非AbstractMap,而是Dictionary
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {...}
好的,看完繼承關係以後,我們可以繼續看接口的。
接口繼承關係
我們平時所說,這是個List,這是個Map,這個是Set在更多的時候是說其實現的是哪個體系的具體接口。
關於Map體系
像Map是一個接口,而我們平時的HashMap,WeakHashMap都是實現了Map接口。
關於Collection體系
Collection的接口如下
首先AbstractCollection是實現了Collection接口,而作爲AbstractCollection子類的AbstractList,AbstractQueue和AbstractSet分別實現了Collection接口的擴展類包括List接口,Queue接口和Set接口,Collection接口的基類是Iterable類
Collection之List
所以我們可以說ArrayList,Vector作爲AbstractList的子類,都是List接口實現對象。後面Set和Queue同理
而具體的實現類中也不乏實現多接口的情況,如LinkedList(有興趣瞭解源碼分析的可以參考我的《LinkedList 插入 源碼分析》)
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>{...}
Collection之Set
Collection之Queue
隊列這個可能平時比較少介紹到