Java Collections Framework之ArrayList源碼分析

openkk 13年前發布 | 25K 次閱讀 Java Java開發

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

    size:ArrayList的長度

    構造函數如下:
    Java Collections Framework之ArrayList源碼分析
利用該參數初始化該數組。
Java Collections Framework之ArrayList源碼分析
將數組的大小設置為10,為該數組分配內存空間。
Java Collections Framework之ArrayList源碼分析
根據Collection c初始化該ArrayList,底層使用的是System.arrayCopy方法

 向該List的尾部添加元素:
Java Collections Framework之ArrayList源碼分析
首先會調用ensureCapacity(size + 1)方法,檢查該List持有的數組是否已到達峰值,如果到了則擴充此數組
Java Collections Framework之ArrayList源碼分析
由代碼可知,每次擴充為原來的一點五倍,可知該操作當容量變大的時候會嚴重造成內存空間的浪費。

 addAll(int index, Collection c):
Java Collections Framework之ArrayList源碼分析
在index位置處依次添加c中的元素,同時將該index處的元素依次右移。

 addAll(Collection c):
Java Collections Framework之ArrayList源碼分析
從該List的尾部依次添加c中含有的元素

clear():
Java Collections Framework之ArrayList源碼分析
清空該List,內部持有的數組的長度并不發生變化。

indexOf(Object o):
Java Collections Framework之ArrayList源碼分析
返回某元素在該List中的索引。

indexOf(Object o):
Java Collections Framework之ArrayList源碼分析
從該List尾部查找第一次出現該o時的索引。

contains(Object o):
Java Collections Framework之ArrayList源碼分析
查找該List是否包含o

fastRemove(int index):
Java Collections Framework之ArrayList源碼分析
刪除該索引處的元素,并且使該索引后面的元素依次左移。

get(int index):
Java Collections Framework之ArrayList源碼分析
獲取索引index處的元素。

isEmpty():
Java Collections Framework之ArrayList源碼分析
判斷該List是否為空

remove(int index):
Java Collections Framework之ArrayList源碼分析
刪除index處的元素,同時右邊的元素左移。

remove(Object o):
Java Collections Framework之ArrayList源碼分析
先查找,再刪除。設計到數組元素的左移。

set(int index, E element):
Java Collections Framework之ArrayList源碼分析
于位置index處設置為element

size():
Java Collections Framework之ArrayList源碼分析
返回該集合的長度

toArray():
Java Collections Framework之ArrayList源碼分析
將該集合轉化為Object數組。

toArray(T[] a):
Java Collections Framework之ArrayList源碼分析
將該集合轉化為特定的數組。

trimToSize():
Java Collections Framework之ArrayList源碼分析
將該數組中空的占位符剔除,以便GC回收。

總結:
      該類和Vector的機構幾乎完全相同,該集合非線程安全

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!