ArrayList 原始碼解析

2021-10-01 13:18:37 字數 1166 閱讀 9530

從日常**看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...