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