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源碼分析