用幾張圖捋完集合的繼承實現關係

難得這幾天都比較閒,所以有時間弄弄博客。剛好在忘了集合的那些繼承關係,就順便整理了一下,而我們平時常見的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

隊列這個可能平時比較少介紹到

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