java集合之ArrayList原始碼解讀

2021-09-22 21:02:05 字數 1628 閱讀 9750

源自:jdk1.8.0_121

arraylist繼承自abstractlist,實現了listrandomaccesscloneableserializable

arraylist內部是通過陣列及陣列的擴容來實現

// 預設容量為10

private static final int default_capacity = 10;

// 空陣列

private static final object empty_elementdata = {};

// 預設空陣列

private static final object defaultcapacity_empty_elementdata = {};

// 存放資料的陣列,被transient修飾的引數不會被序列化

transient object elementdata;

// 實際元素的大小

private int size;

public arraylist(int initialcapacity)  else if (initialcapacity == 0)  else 

}public arraylist()

public arraylist(collection<? extends e> c) else

}

注:arraylist(collection<? extends e> c)之所以要判斷是否為object型別,是因為呼叫toarray()方法的實現方式不同。

public object toarray()
private final e a;

public object toarray()

public boolean add(e e) 

private void ensurecapacityinternal(int mincapacity)

ensureexplicitcapacity(mincapacity);

}private void ensureexplicitcapacity(int mincapacity)

private void grow(int mincapacity)

從原始碼可以看出,如果1.5倍的elementdata.length小於10,會將elementdata的大小擴容成預設的10,反之,則會以1.5倍的elementdata.length進行擴容。

public void trimtosize() 

}

posted @

2018-01-24 12:04

jarjune 閱讀(

...)

編輯收藏

Java中Vector和ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下 arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對元素...

Java中Vector和ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下 arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對元素...

Java中Vector和ArrayList的區別

首先看這兩類都實現list介面,而list介面一共有三個實現類,分別是arraylist vector和linkedlist。list用於存放多個元素,能夠維護元素的次序,並且允許元素的重複。3個具體實現類的相關區別如下 1 arraylist是最常用的list實現類,內部是通過陣列實現的,它允許對...