ArrayList原始碼分析

2021-10-16 12:50:29 字數 1885 閱讀 5095

成員變數

//指定serialversionuid,防止**修改之後,無法反序列化

private

static

final

long serialversionuid =

8683452581122892189l;

//預設容量為0,首次add之後才會擴容

private

static

final

int default_capacity =10;

//使用者指定容量的空陣列

private

static

final object[

] empty_elementdata =

;//預設容量的空陣列

private

static

final object[

] defaultcapacity_empty_elementdata =

;//源目標陣列。

transient object[

] elementdata;

//陣列中的元素個數

private

int size;

構造方法

//無參構造返回預設容量的空陣列。

public

arraylist()

//指定容量的構造,當為0時,返回空陣列

public

arraylist

(int initialcapacity)

else

if(initialcapacity ==0)

else

}

public

arraylist

(collection<

?extends

e> c)

else

}

add方法

public

boolean

add(e e)

private

void

ensurecapacityinternal

(int mincapacity)

//2.這裡確定最小的容量,如果是預設容量的空陣列,則賦為10

private

static

intcalculatecapacity

(object[

] elementdata,

int mincapacity)

return mincapacity;

}//3.這裡比較一下是否需要擴容,

private

void

ensureexplicitcapacity

(int mincapacity)

//4.這裡擴容首先嘗試擴大原容量+右移一位,約等於1.5倍,如果小於要擴容的最低容量,則擴最低容量

private

void

grow

(int mincapacity)

指定位置的add方法

public

void

add(

int index, e element)

remove方法

public e remove

(int index)

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...