Java集合【總目錄,更新中...】

Java集合【總目錄】

前言

2020年6月6日
  之前自己學習Java集合都是很籠統地學,知識點很零散,所以想開一個欄目,對自己的Java集合知識進行梳理展示,也供各位同學借鑑。如有錯誤之處,請各位不吝指教!

1.什麼是Java集合?

Ⅰ、集合是一個存放數據的容器;
Ⅱ、集合的類型有三種,分別對應三種存放規則:
  List(列表):連續、有序地存放數據,
  Set(集):不可重複地存放數據,
  Map(映射):存放鍵值數據對key-value,key不可重複。

Java集合的結構圖如下:
在這裏插入圖片描述

圖中很詳細地表示了各接口和類之間的關係,結合圖和源碼,我們可以看到,一些實現類會繼承一個抽象類以及實現一個接口,如:
HashMap:

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{...}

ArrayList:

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...}

HashSet:

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{...}

那它爲什麼不直接實現接口,還要多繼承一個抽象類呢?
  我們將擁有同一特性的幾個類的公共方法提取出來,放到一個抽象類中去,這就相當於給這些類設置了一個設計規範。
  比如:Set接口下的實現類都必須有add(添加),get(讀取)、remove(刪除)、clear(清空)等方法,那就先寫一個AbstractSet抽象類存放這些方法,讓所有Set的實現類都繼承AbstractSet,然後再根據子類的需求看是否需要重寫。

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
     protected AbstractList() {
    }

     public boolean add(E e) {
        add(size(), e);
        return true;
    }
    
    abstract public E get(int index);

    public E set(int index, E element) {
        throw new UnsupportedOperationException();
    }

    void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

    public E remove(int index) {
        throw new UnsupportedOperationException();
    }
    
    public void clear() {
        removeRange(0, size());
    }
    ......

}

知道抽象類的作用後,我們可以把上面的圖進一步簡化,得到它的簡易版。
在這裏插入圖片描述
詳解鏈接:

List

ArrayList:ArrayList源碼分析

Set

Map

HashMap:HashMap源碼分析

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