1. 程式人生 > >Java ArrayList詳細介紹和使用示例

Java ArrayList詳細介紹和使用示例

zab tco random class strong art vector 導致 執行

對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詳細介紹和使用示例