1. 程式人生 > >Java學習筆記之ArrayList

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