Java Collections Framework之ArrayList源碼分析
該類是JDK1.2中添加的類,可用于替代Vector(1.1中包含的類庫) 其內部持有的也是一個數組。Hierarchy的結構如下:
該類并非線程安全的,主要含有兩個字段:
elementData:內部持有的數組
size:ArrayList的長度
構造函數如下:

利用該參數初始化該數組。

將數組的大小設置為10,為該數組分配內存空間。

根據Collection c初始化該ArrayList,底層使用的是System.arrayCopy方法
向該List的尾部添加元素:

首先會調用ensureCapacity(size + 1)方法,檢查該List持有的數組是否已到達峰值,如果到了則擴充此數組

由代碼可知,每次擴充為原來的一點五倍,可知該操作當容量變大的時候會嚴重造成內存空間的浪費。
addAll(int index, Collection
c):

在index位置處依次添加c中的元素,同時將該index處的元素依次右移。
addAll(Collection
c):

從該List的尾部依次添加c中含有的元素
clear():

清空該List,內部持有的數組的長度并不發生變化。
indexOf(Object o):

返回某元素在該List中的索引。
indexOf(Object o):

從該List尾部查找第一次出現該o時的索引。
contains(Object o):

查找該List是否包含o
fastRemove(int index):

刪除該索引處的元素,并且使該索引后面的元素依次左移。
get(int index):

獲取索引index處的元素。
isEmpty():

判斷該List是否為空
remove(int index):

刪除index處的元素,同時右邊的元素左移。
remove(Object o):

先查找,再刪除。設計到數組元素的左移。
set(int index, E element):

于位置index處設置為element
size():

返回該集合的長度
toArray():

將該集合轉化為Object數組。
toArray(T[] a):

將該集合轉化為特定的數組。
trimToSize():

將該數組中空的占位符剔除,以便GC回收。
總結:
該類和Vector的機構幾乎完全相同,該集合非線程安全。