層次結構
頂層層次結構
ArrayList實際上是繼承了AbstractList,同僚實作了List,RandomAccess,Clonable,Serializable序列化接口。
AbstractList
AbstractList抽象類繼承了AbstractCollection并實作了List接口,其中AbstractCollection實作了Collection接口。
ArrayList源碼分析
屬性
1 private static final int DEFAULT_CAPACITY = 10; //預設容量
private static final Object[] EMPTY_ELEMENTDATA = {}; //共享空數組執行個體為空的執行個體們使用。
//為預設的空執行個體準備的共享的空數組執行個體。我們差別于EMPTY_ELEMENTDATA以辨識膨脹多少當第一個元素被添加的時候。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//這個數組緩沖區進入數組的元素被存儲。
//數組的容積是數組緩沖區的長度。
//任何空的數組帶數組元素等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA會被展開到DEFAULT_CAPACITY當數組當中第一個元素被添加進去。
transient Object[] elementData;//非私有被簡化嵌套類的通路
private int size;//數組的大小(有多少元素它包含)
方法
//構造一個空的ArrayList帶10的初始化長度。
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
/*
構造一個list包含集合選擇的一些元素,在這個隊列當中,它們被集合的疊代器傳回。
param c 這個集合誰的元素被放入list當中
throws NullPointerException 如果指定的集合為空
*/
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray(錯誤的)不傳回數組對象。
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
//被替代為空數組
this.elementData = EMPTY_ELEMENTDATA;
}
}

作者:
KMSFan
出處:http://www.cnblogs.com/kmsfan
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
歡迎大家加入KMSFan之家,以及通路我的優酷空間!