Java學習筆記之ArrayList
ArrayList實現了List介面。
1. 構造方法
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
2. 私有變數DEFAULTCAPACITY_EMPTY_ELEMENTDATA
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
由此可見,ArrayList實際就是一個動態陣列,那麼ArrayList就有動態陣列的所有特性。
3. add()
add方法主要實現了兩個功能,一個是動態陣列擴容size+1,一個是elementData[size++] = e;
4. remove()
remove方法,for迴圈遍歷陣列,找到要remove的資料,呼叫System.arraycopy方法,把需要刪除的資料後面的所有資料向前挪動一個位置,並把陣列中最後一個物件置為null(交給GC處理),size-1,並返回true,表示處理完畢,否則返回false。
5. addAll()
addAll方法是把傳過來的集合整體新增到當前集合的末尾(如指定位置,則是插入該位置,該位置原資料向後移動)
6. clear()
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
所有資料置為null,並把size修改為0
7. clone()
ArrayList<?> v = (ArrayList<?>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
克隆當前ArrayList,之前有過這種需求,自己還是重新組合的,以後也可以呼叫Arrays.copyOf方法了
8. contains()、indexOf()
該方法中遍歷整個陣列,並呼叫equals方法來進行比較,如果有相等的,返回下標,如果沒有相等的,返回-1
9. ensureCapacity()
增加容量到指定大小
10. get()
返回陣列指定位置的物件
11. isEmpty()
public boolean isEmpty() {
return size == 0;
}
如果陣列的大小為0,返回true,其他情況都是false
12. iterator()
public Iterator<E> iterator() {
return new Itr();
}
該方法返回了一個Iterator物件,
13. lastIndexOf()
從陣列最後一個元素開始向前遍歷,返回第一個出現的索引,如果沒有返回-1
14. listIterator()
public ListIterator<E> listIterator() {
return new ListItr(0);
}
返回對應ListItr物件,預設為0
15. retainAll()
刪除指定集合外的所有資料,此方法的實現方法為:首先遍歷整個陣列,把包含的陣列放在前面,每次放置記錄次數w,並在最後把w之後的所有資料置為null(GC),如果調整後陣列長度沒有變,則返回false,如果調整之後陣列長度發生了改變,返回true。
16. set()
修改指定位置的物件,並返回修改前的物件
17. subList()
返回指定範圍的資料,並保持和原資料的關聯性。呼叫此方法並不會影響原資料大小。
18. toArray()
把該集合轉化為陣列物件。
19. trimToSize()
如果size和elementData.length不同的時候,根據size調整elementData