1. 程式人生 > >Java基礎之有容乃大篇(容器篇

Java基礎之有容乃大篇(容器篇

JAVA容器

   我們學習容器的時候用最原始的分析方式

        1. 有啥沒啥 ,

        2. 啥是啥 ,

        3. 啥能幹啥,

        4. 啥和啥有啥關係

    這裡再容器的介紹這一篇文章主要講的是有啥沒啥

    java容器可以分為三類:

        1.List    線性表,在資料結構中,線性表有兩種實現方式,一種是陣列實現,另一種是用連結串列來實現

        2.Set    一個沒有重複元素的集合,集合中元素沒有順序,可以存在空值。

        3.Map   鍵值對的集合,一個鍵對應一個value,存取速度很快。

    java容器List、Set的繼承關係圖:

介紹一下介面和超類:

先介紹介面:

    Iterable介面,容器中的頂級介面,介面中規定了一個迭代方法,iterator。

    Collection介面,繼承了Iterable的iterator方法,擴充套件了一些集合常用的方法,比如add,size,isEmpty,contains等集合

        常用的方法,定義了集合最基本的方法。

    List介面,繼承了Collection,在集合的基礎上特化出線性表的概念,定義了線性表常用的一些方法,get/set,add指定位置添

        加,indexOf,lastIndexOf等方法。

        我們都知道,線性表延伸出佇列

          1.佇列Queue介面,繼承了List,定義了佇列的常用方法,offer,poll,peak等方法。

            Deque介面是Queue介面的子介面,代表一個雙端佇列。同時Deque不僅可以作為雙端佇列使用,而且可以被當成棧來

            使用,所以可以使用出棧,入棧的方法。

          2.棧這裡上圖中沒有畫到棧的圖,是因為我們圍繞ArrayList和linkedList,HashSet,HashMap等常用集合來講,簡單說下

            棧,棧繼承了Vector,Vector繼承了AbstractList超類。Vector是一個底層為陣列實現的集合,平時我們不是很常用。

    Set介面,繼承了Collection,擴充套件了新增元素的方法,查詢元素的方法,迭代方法和刪除方法,方法不是很多。

            Set主要有三個實現類:

                1.HashSet        無序

                2.LinkedHashSet        有序

                3.TreeSet        有序

           上面就畫了兩個,linkedHashSet我不經常用,所以也就沒畫。至於TreeSet繼承NavigableSet,NavigableSet繼承Sort

            edSet,SortedSet定義了有序Set的方法,在SortedSet中元素一定是有序的,目前我知道的也只有TreeSet繼承他。

             NavigableSet擴充套件了 SortedSet,具有了為給定搜尋目標報告最接近匹配項的導航方法。方法 lower、floor、ceiling             和 
                higher 分別返回小於、小於等於、大於等於、大於給定元素的元素,如果不存在這樣的元素,則返回 null。

介紹超類:

上面的圖超類主要有AbstractCollection,AbstractList,AbstractSet,AbstrackSequentialList。按照目前我的段位來理

        解,超類對超類所實現的介面進行了一些具體化的實現方式,也有一些方法是留給子類去實現的。超類有很多我們拿出一個

        來講,AbstractCollection,它實現了一些方法,也定義了幾個抽象方法留給子類實現,因此它是一個抽象類

        它有兩個抽象方法

        public abstract Iterator<E> iterator();

        public abstract int size();

    這兩個方法需要自己去是實現。他的add方法是這樣的。

public boolean add(E object) {
    throw new UnsupportedOperationException();
}

    如果子類是一個可以新增元素的集合,必須重寫add方法。保證集合是可以新增元素的。

    剩下的一些方法AbstractCollection超類自己就實現了,另外它還重寫了toString方法,這也是我們為什麼能輸出集合中元素的原因。

    java容器Map繼承關係圖:

   

    Map介面定義了源於Map的所有基本操作。

    Dictionary 類是一個抽象類,用來儲存鍵/值對,作用和Map類相似。給出鍵和值,你就可以將值儲存在Dictionary物件中。一旦該值被儲存,就可以通過它的鍵來獲取它。所以和Map一樣, Dictionary 也可以作為一個鍵/值對列表。

    AbstractMap 是 Map 介面的的實現類之一,也是 HashMap, TreeMap, ConcurrentHashMap 等類的父類。AbstractMap 提供了 Map 的基本實現,使得我們以後要實現一個 Map 不用從頭開始,只需要繼承 AbstractMap, 然後按需求實現/重寫對應方法即可。

    AbstarctMap 中唯一的抽象方法:

public abstract Set<Entry<K,V>> entrySet();

    這裡不詳細的說明每一個類介面具體的一些方法和實現,後續會一點一點的慢慢梳理。

 java容器全部繼承關係圖:


這裡關於concrrent包裡面的集合類暫時不去考慮,後續會一點一點的補充進來。

    總之,我們平時經常使用的集合繼承關係已經說明清楚了,後續在我的部落格中會慢慢對每一個介面,超類,具體實現類做一個詳細的敘述。