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<? extends E> c):

在index位置處依次添加c中的元素,同時將該index處的元素依次右移。spa

 addAll(Collection<? extends E> c):

從該List的尾部依次添加c中含有的元素線程

clear():

清空該List,內部持有的數組的長度並不發生變化。設計

indexOf(Object o):

返回某元素在該List中的索引。索引

indexOf(Object o):

從該List尾部查找第一次出現該o時的索引。內存

contains(Object o):

查找該List是否包含oci

fastRemove(int index):

刪除該索引處的元素,而且使該索引後面的元素依次左移。element

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的機構幾乎徹底相同,該集合非線程安全

相關文章
相關標籤/搜索