ArrayList原始碼分析

2021-09-19 04:36:20 字數 1463 閱讀 9475

//預設容量大小

private static final int default_capacity = 10;

例項化arraylist時是乙個空object陣列

private static final object empty_elementdata = {};

//預設容量空元素陣列,當第一次新增元素時會和此陣列判斷是不是空陣列

private static final object defaultcapacity_empty_elementdata = {};

//儲存資料的緩衝區,arraylist的所有元素都存在此陣列中

arraylist例項化時是乙個預設空陣列。

add方法分析

對於arraylist,如果已知資料大小,最好規定好集合的大小,如果採用預設方式例項化,它會不斷擴容,每擴容一次就要將原資料重新考備到新陣列中,這是很浪費資源的。

//新增元素 第一次新增時

public boolean add(e e)

//判斷陣列長度是否夠用

private void ensurecapacityinternal(int mincapacity)

//返回陣列容量的最小值,當arraylist的長度大於陣列長度時返回arraylist的長度

private static int calculatecapacity(object elementdata, int mincapacity)

return mincapacity;

}//擴容陣列,

private void ensureexplicitcapacity(int mincapacity)

//擴容方法,以原陣列長度的一半擴容

private void grow(int mincapacity)

//當新容量大於最大值時的處理方法

private static int hugecapacity(int mincapacity)

remove方法

//刪除元素是用for迴圈遍歷陣列實現的,時間複雜度o(n)

public boolean remove(object o)

} else

}return false;

}private void fastremove(int index)

vector集合和arraylist基本類似,底層也是使用object陣列,不過vector是執行緒安全的,而arraylist執行緒不安全。

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