Java ArrayList詳細介紹和使用示例
對ArrayList的整體認識
ArrayList是一個數組隊列,相當於動態數組。與Java中的數組相比,它的容量能動態增長。它繼承了AbstractList,實現了List,RandomAccess,Cloneable,java.io.Serializable這些接口。
ArrayList繼承了AbstractList,實現了List.它是一個數組隊列,提供了相關的添加、刪除、修改、遍歷等功能。
ArrayList實現了RandomAccess接口,即提供了隨機訪問功能,RandomAccess是java中用來被List實現,為List提供快速訪問功能的。在ArrayList中,我們即可以通過元素的序號快速獲取元素對象,這就是快速隨機訪問。稍後,我們會比較List的快速隨機訪問和通過Iterator叠代器訪問的效率。
ArrayList實現了Cloneable接口,即覆蓋了函數clone(),能被克隆。
ArrayList實現java.io.Serializable接口,這意味著ArrayList支持序列化,能通過序列化去傳輸。
和Vector不同,ArrayList中的操作不是線程安全的,所以,建議在單線程中才使用ArrayList,而在多線程中可以選擇Vector或則CopyOnWriteArrayList.
ArrayList構造函數
// 默認構造函數 ArrayList() // capacity是ArrayList的默認容量大小。當由於增加數據導致容量不足時,容量會添加上一次容量大小的一半。 ArrayList(int capacity) // 創建一個包含collection的ArrayList ArrayList(Collection<? extends E> collection)
ArrayList的API
// Collection中定義的API boolean add(E object) boolean addAll(Collection<? extends E> collection) void clear() boolean contains(Object object) boolean containsAll(Collection<?> collection) boolean equals(Object object) int hashCode() boolean isEmpty() Iterator<E> iterator() boolean remove(Object object) boolean removeAll(Collection<?> collection) boolean retainAll(Collection<?> collection) int size() <T> T[] toArray(T[] array) Object[] toArray() // AbstractCollection中定義的API void add(int location, E object) boolean addAll(int location, Collection<? extends E> collection) E get(int location) int indexOf(Object object) int lastIndexOf(Object object) ListIterator<E> listIterator(int location) ListIterator<E> listIterator() E remove(int location) E set(int location, E object) List<E> subList(int start, int end) // ArrayList新增的API Object clone() void ensureCapacity(int minimumCapacity) void trimToSize() void removeRange(int fromIndex, int toIndex)
ArrayList的繼承關系
java.lang.Object ? java.util.AbstractCollection<E> ? java.util.AbstractList<E> ? java.util.ArrayList<E> public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}
ArrayList包含了兩個重要的對象:elementData 和 size。
(01) elementData 是"Object[]類型的數組",它保存了添加到ArrayList中的元素。實際上,elementData是個動態數組,我們能通過構造函數 ArrayList(int initialCapacity)來執行它的初始容量為initialCapacity;如果通過不含參數的構造函數ArrayList()來創建ArrayList,則elementData的容量默認是10。elementData數組的大小會根據ArrayList容量的增長而動態的增長,具體的增長方式,請參考源碼分析中的ensureCapacity()函數。
(02) size 則是動態數組的實際大小。
ArrayList源碼代碼作出分析
http://www.cnblogs.com/skywang12345/p/3308556.html
Java ArrayList詳細介紹和使用示例