從日常**看arraylist的執行流程
第一步:我們初始化乙個 arraylist;然後新增乙個元素,**如下
public class arraylisttest
}
arraylist的建構函式和方法有三個,乙個是帶有初始大小的arraylist,乙個傳入collection<? extends e>,另外乙個空參。
我們呼叫空參建構函式,建構函式中初始化了乙個 空的陣列。
private static final object defaultcapacity_empty_elementdata = {};
public arraylist()
第二步: 新增元素 ,上原始碼:
private int size;
public boolean add(e e)
因為當宣告乙個int值時,他的值等於0,我們就可以看到傳入ensurecapacityinternal 為1
private static final int default_capacity = 10;
private void ensurecapacityinternal(int mincapacity)
ensureexplicitcapacity(mincapacity);
}
判斷 目前的elementdata 是不是還是空的陣列,如果是空的,我們第一步要決定這個陣列的初始化大小了。上一步得到 mincapacity=1 ,因為小於default_capacity ,所以我們初始化大小為10
protected transient int modcount = 0;
private void ensureexplicitcapacity(int mincapacity)
因為是新的元素,所以我們的元素為0個,然後++,變成了乙個,因為我們傳入的是10 ,然後執行 grow 方法,來初始化陣列的長度了,插乙個transient的介紹:序列化的時候,將不需要序列化的屬性前新增關鍵字transient即可
private void grow(int mincapacity)
從這個方法中我們中我們可以得到初始化的陣列為10了。 ArrayList原始碼解析
new arraylist public arraylist public arraylist int initialcapacity else if initialcapacity 0 else private static final object defaultcapacity empty e...
ArrayList原始碼解析
arraylist內部的結構採用的是陣列。transient object elementdata non private to simplify nested class access當我們使用預設建構函式的時候,如下 private static final object defaultcapa...
ArrayList 原始碼解析
一,arraylist是什麼?可以用來幹什麼?arraylist就是陣列列表,主要用來裝載資料,當我們裝載的是基本型別的資料int,long,boolean,short,byte 的時候我們只能儲存他們對應的包裝類,它的主要底層實現是陣列object elementdata。與它類似的是linked...