ArrayList原始碼分析

2021-09-25 09:48:00 字數 1686 閱讀 2859

基於jdk1.8

建立 arraylist arraylist = new arraylist(); ctrl+左鍵看看發生了什麼?

public arraylist() 

transient object elementdata; // non-private to simplify nested class access

private static final object defaultcapacity_empty_elementdata = {};

我們看到構造器有兩個變數,這裡我就可以得出:arraylist的底層是由陣列實現的,且我們沒有給初始長度的時候預設給的是乙個空陣列;

之前沒有給初始容量預設陣列長度是10,jdk1.8是賦值了乙個空的陣列。

//方法中要用到變數

private int size;//記錄集合的實際存放的元素個數;

private static final int default_capacity = 10;//預設容量=10;

public boolean add(e e)

private void ensurecapacityinternal(int mincapacity)

//咳咳,去下面看這個方法的講解

ensureexplicitcapacity(mincapacity);

}//來了,老弟?

private void ensureexplicitcapacity(int mincapacity)

//又來了?

private void grow(int mincapacity)

public void add(int index, e element) 

//下標判斷

private void rangecheckforadd(int index)

//native修飾了,說明呼叫的是本地方法了,底層用的c語言了。就講講怎麼用的吧!

public static native void arraycopy(object src, int srcpos,

object dest, int destpos,

int length);

假設原陣列 elementdata = (已經擴容了,最後一位為空),現在想在下標為1的位置插入「w」。最終為elementdata =

怎麼來對應引數含義呢?(按順序解釋)

elementdata:被複製的原陣列

index:開始複製的下標(從這裡開始複製,我例子中的"b"元素開始複製)

elementdata:接收的陣列

index + 1:從哪個位置開始接收資料(我例子中的"c"元素開始複製)

size - index:複製長度是多少

上面陣列複製結束後應該是 elementdata =

然後elementdata[index] = element;

最終elementdata =

ArrayList原始碼分析

arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...

ArrayList原始碼分析

有參建構函式傳入乙個int public arraylist int capacity 如果為0則返回空陣列,否則new 乙個capacity的陣列 array capacity 0 emptyarray.object new object capacity 無參建構函式 public arrayl...

ArrayList原始碼分析

最近因為擁抱變換,所以開始無奈的面試之路。因為在集合的原始碼分析上,出了些問題,所以這段時間,好好重新理一理常用的集合原始碼。版本基於jdk1.7 毫無疑問,提到常用集合。arraylist勢必是第乙個被搬出來的,因此我們就先拿它開刀了。arraylist的初始化,只有在第一次add的時候進行new...