天天看點

Java 集合類型之ArrayList 源碼解析

層次結構

頂層層次結構

  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;
        }
    }      
Java 集合類型之ArrayList 源碼解析

作者:

KMSFan

出處:http://www.cnblogs.com/kmsfan

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

歡迎大家加入KMSFan之家,以及通路我的優酷空間!