JavaTM 2 Platform
Standard Ed. 6

java.util
類別 ArrayList<E>

java.lang.Object
  繼承者 java.util.AbstractCollection<E>
      繼承者 java.util.AbstractList<E>
          繼承者 java.util.ArrayList<E>
所有已實作的介面:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
直接已知子類別:
AttributeList, RoleList, RoleUnresolvedList

public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

List 介面的大小可變陣列的實作。實作了所有可選列表操作,並允許包括 null 在內的所有元素。除了實作 List 介面外,此類別還提供一些方法來操作內部用來存儲列表的陣列的大小。(此類別大致上等同於 Vector 類別,除了此類別是不同步的。)

sizeisEmptygetsetiteratorlistIterator 操作都以固定時間運行。add 操作以分攤的固定時間 運行,也就是說,添加 n 個元素需要 O(n) 時間。其他所有操作都以線性時間運行(大體上講)。與用於 LinkedList 實作的常數因子相比,此實作的常數因子較低。

每個 ArrayList 實例都有一個容量。該容量是指用來存儲列表元素的陣列的大小。它總是至少等於列表的大小。隨著向 ArrayList 中不斷添加元素,其容量也自動增長。並未指定增長策略的細節,因為這不只是添加元素會帶來分攤固定時間開銷那樣簡單。

在添加大量元素前,應用程序可以使用 ensureCapacity 操作來增加 ArrayList 實例的容量。這可以減少遞增式再分派的數量。

注意,此實作不是同步的。如果多個執行緒同時存取一個 ArrayList 實例,而其中至少一個執行緒從結構上修改了列表,那麼它必須 保持外部同步。(結構上的修改是指任何添加或刪除一個或多個元素的操作,或者顯式調整底層陣列的大小;僅僅設置元素的值不是結構上的修改。)這一般通過對自然封裝該列表的物件進行同步操作來完成。如果不存在這樣的物件,則應該使用 Collections.synchronizedList 方法將該列表“包裹”起來。這最好在創建時完成,以防止意外對列表進行不同步的存取:

        List list = Collections.synchronizedList(new ArrayList(...)); 

此類別的 iteratorlistIterator 方法返回的迭代器是快速失敗的:在創建迭代器之後,除非通過迭代器自身的 removeadd 方法從結構上對列表進行修改,否則在任何時間以任何方式對列表進行修改,迭代器都會拋出 ConcurrentModificationException。因此,面對共時的修改,迭代器很快就會完全失敗,而不是冒著在將來某個不確定時間發生任意不確定行為的風險。

注意,迭代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步共時修改做出任何硬性保證。快速失敗迭代器會盡最大努力拋出 ConcurrentModificationException。因此,為提高這類別迭代器的正確性而編寫一個依賴於此異常的程序是錯誤的做法:迭代器的快速失敗行為應該僅用於檢測 bug。

此類別是 Java Collections Framework 的成員。

從以下版本開始:
1.2
另請參見:
Collection, List, LinkedList, Vector, Collections.synchronizedList(List), 序列化表格

欄位摘要
 
從類別 java.util.AbstractList 繼承的欄位
modCount
 
建構子摘要
ArrayList()
          建構一個初始容量為 10 的空列表。
ArrayList(Collection<? extends E> c)
          建構一個套件含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。
ArrayList(int initialCapacity)
          建構一個具有指定初始容量的空列表。
 
方法摘要
 boolean add(E e)
          將指定的元素添加到此列表的尾部。
 void add(int index, E element)
          將指定的元素插入此列表中的指定位置。
 boolean addAll(Collection<? extends E> c)
          按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部。
 boolean addAll(int index, Collection<? extends E> c)
          從指定的位置開始,將指定 collection 中的所有元素插入到此列表中。
 void clear()
          移除此列表中的所有元素。
 Object clone()
          返回此 ArrayList 實例的淺表副本。
 boolean contains(Object o)
          如果此列表中包含指定的元素,則返回 true
 void ensureCapacity(int minCapacity)
          如有必要,增加此 ArrayList 實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數。
 E get(int index)
          返回此列表中指定位置上的元素。
 int indexOf(Object o)
          返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。
 boolean isEmpty()
          如果此列表中沒有元素,則返回 true
 int lastIndexOf(Object o)
          返回此列表中最後一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。
 E remove(int index)
          移除此列表中指定位置上的元素。
 boolean remove(Object o)
          移除此列表中首次出現的指定元素(如果存在)。
protected  void removeRange(int fromIndex, int toIndex)
          移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。
 E set(int index, E element)
          用指定的元素替代此列表中指定位置上的元素。
 int size()
          返回此列表中的元素數。
 Object[] toArray()
          按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列。
<T> T[]
toArray(T[] a)
          按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列;返回陣列的運行時型別是指定陣列的運行時型別。
 void trimToSize()
          將此 ArrayList 實例的容量調整為列表的當前大小。
 
從類別 java.util.AbstractList 繼承的方法
equals, hashCode, iterator, listIterator, listIterator, subList
 
從類別 java.util.AbstractCollection 繼承的方法
containsAll, removeAll, retainAll, toString
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 
從介面 java.util.List 繼承的方法
containsAll, equals, hashCode, iterator, listIterator, listIterator, removeAll, retainAll, subList
 

建構子詳細資訊

ArrayList

public ArrayList(int initialCapacity)
建構一個具有指定初始容量的空列表。

參數:
initialCapacity - 列表的初始容量
拋出:
IllegalArgumentException - 如果指定的初始容量為負

ArrayList

public ArrayList()
建構一個初始容量為 10 的空列表。


ArrayList

public ArrayList(Collection<? extends E> c)
建構一個套件含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。

參數:
c - 其元素將放置在此列表中的 collection
拋出:
NullPointerException - 如果指定的 collection 為 null
方法詳細資訊

trimToSize

public void trimToSize()
將此 ArrayList 實例的容量調整為列表的當前大小。應用程序可以使用此操作來最小化 ArrayList 實例的存儲量。


ensureCapacity

public void ensureCapacity(int minCapacity)
如有必要,增加此 ArrayList 實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數。

參數:
minCapacity - 所需的最小容量

size

public int size()
返回此列表中的元素數。

指定者:
介面 Collection<E> 中的 size
指定者:
介面 List<E> 中的 size
指定者:
類別 AbstractCollection<E> 中的 size
返回:
此列表中的元素數

isEmpty

public boolean isEmpty()
如果此列表中沒有元素,則返回 true

指定者:
介面 Collection<E> 中的 isEmpty
指定者:
介面 List<E> 中的 isEmpty
覆寫:
類別 AbstractCollection<E> 中的 isEmpty
返回:
如果此列表中沒有元素,則返回 true

contains

public boolean contains(Object o)
如果此列表中包含指定的元素,則返回 true。更確切地講,當且僅當此列表包含至少一個滿足 (o==null ? e==null : o.equals(e)) 的元素 e 時,則返回 true

指定者:
介面 Collection<E> 中的 contains
指定者:
介面 List<E> 中的 contains
覆寫:
類別 AbstractCollection<E> 中的 contains
參數:
o - 測試此列表中是否存在的元素
返回:
如果此列表包含特定的元素,則返回 true

indexOf

public int indexOf(Object o)
返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。更確切地講,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i ,如果不存在此類別索引,則返回 -1。

指定者:
介面 List<E> 中的 indexOf
覆寫:
類別 AbstractList<E> 中的 indexOf
參數:
o - 要搜尋的元素
返回:
此列表中第一次出現的指定元素的索引,如果列表不包含該元素,則返回 -1

lastIndexOf

public int lastIndexOf(Object o)
返回此列表中最後一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。更確切地講,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果不存在此類別索引,則返回 -1。

指定者:
介面 List<E> 中的 lastIndexOf
覆寫:
類別 AbstractList<E> 中的 lastIndexOf
參數:
o - 要搜尋的元素
返回:
列表中最後出現的指定元素的索引;如果列表不包含此元素,則返回 -1

clone

public Object clone()
返回此 ArrayList 實例的淺表副本。(不複製這些元素本身。)

覆寫:
類別 Object 中的 clone
返回:
ArrayList 實例的一個副本
另請參見:
Cloneable

toArray

public Object[] toArray()
按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列。

由於此列表不維護對返回陣列的任何參考,,因而它將是「安全的」。(換句話說,此方法必須分派一個新的陣列)。因此,調用者可以自由地修改返回的陣列。

此方法擔當基於陣列的 API 和基於 collection 的 API 之間的橋樑。

指定者:
介面 Collection<E> 中的 toArray
指定者:
介面 List<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
返回:
包含此列表中所有元素的陣列(按適當順序)
另請參見:
Arrays.asList(Object[])

toArray

public <T> T[] toArray(T[] a)
按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列;返回陣列的運行時型別是指定陣列的運行時型別。如果指定的陣列能容納列表,則將該列表返回此處。否則,將分派一個具有指定陣列的運行時型別和此列表大小的新陣列。

如果指定的陣列能容納佇列,並有剩餘的空間(即陣列的元素比佇列多),那麼會將陣列中緊接 collection 尾部的元素設置為 null。( 在調用者知道列表中不包含任何 null 元素時才能用此方法確定列表長度)。

指定者:
介面 Collection<E> 中的 toArray
指定者:
介面 List<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
參數:
a - 要在其中存儲列表元素的陣列(如果它足夠大);否則,為此分派一個具有相同運行時型別的新陣列。
返回:
包含列表元素的陣列
拋出:
ArrayStoreException - 如果指定陣列的運行時型別不是此列表每個元素的運行時型別的父級類別型
NullPointerException - 如果指定陣列為 null

get

public E get(int index)
返回此列表中指定位置上的元素。

指定者:
介面 List<E> 中的 get
指定者:
類別 AbstractList<E> 中的 get
參數:
index - 要返回元素的索引
返回:
此列表中指定位置上的元素
拋出:
IndexOutOfBoundsException - 如果索引超出範圍 (index < 0 || index >= size())

set

public E set(int index,
             E element)
用指定的元素替代此列表中指定位置上的元素。

指定者:
介面 List<E> 中的 set
覆寫:
類別 AbstractList<E> 中的 set
參數:
index - 要替代的元素的索引
element - 存儲在指定位置上的元素
返回:
以前位於該指定位置上的元素
拋出:
IndexOutOfBoundsException - 如果索引超出範圍 (index < 0 || index >= size())

add

public boolean add(E e)
將指定的元素添加到此列表的尾部。

指定者:
介面 Collection<E> 中的 add
指定者:
介面 List<E> 中的 add
覆寫:
類別 AbstractList<E> 中的 add
參數:
e - 要添加到此列表中的元素
返回:
true(按照 Collection.add(E) 的指定)

add

public void add(int index,
                E element)
將指定的元素插入此列表中的指定位置。向右移動當前位於該位置的元素(如果有)以及所有後續元素(將其索引加 1)。

指定者:
介面 List<E> 中的 add
覆寫:
類別 AbstractList<E> 中的 add
參數:
index - 指定元素所插入位置的索引
element - 要插入的元素
拋出:
IndexOutOfBoundsException - 如果索引超出範圍 (index < 0 || index > size())

remove

public E remove(int index)
移除此列表中指定位置上的元素。向左移動所有後續元素(將其索引減 1)。

指定者:
介面 List<E> 中的 remove
覆寫:
類別 AbstractList<E> 中的 remove
參數:
index - 要移除的元素的索引
返回:
從列表中移除的元素
拋出:
IndexOutOfBoundsException - 如果索引超出範圍 (index < 0 || index >= size())

remove

public boolean remove(Object o)
移除此列表中首次出現的指定元素(如果存在)。如果列表不包含此元素,則列表不做改動。更確切地講,移除滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此類別元素)。如果列表中包含指定的元素,則返回 true(或者等同於這種情況:如果列表由於調用而發生更改,則返回 true)。

指定者:
介面 Collection<E> 中的 remove
指定者:
介面 List<E> 中的 remove
覆寫:
類別 AbstractCollection<E> 中的 remove
參數:
o - 要從此列表中移除的元素(如果存在)
返回:
如果此列表包含指定的元素,則返回 true

clear

public void clear()
移除此列表中的所有元素。此調用返回後,列表將為空。

指定者:
介面 Collection<E> 中的 clear
指定者:
介面 List<E> 中的 clear
覆寫:
類別 AbstractList<E> 中的 clear

addAll

public boolean addAll(Collection<? extends E> c)
按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部。如果正在進行此操作時修改指定的 collection ,那麼此操作的行為是不確定的。(這意味著如果指定的 collection 是此列表且此列表是非空(null)的,那麼此調用的行為是不確定的)。

指定者:
介面 Collection<E> 中的 addAll
指定者:
介面 List<E> 中的 addAll
覆寫:
類別 AbstractCollection<E> 中的 addAll
參數:
c - 套件含要添加到此列表中的元素的 collection
返回:
如果此列表由於調用而發生更改,則返回 true
拋出:
NullPointerException - 如果指定的 collection 為 null
另請參見:
AbstractCollection.add(Object)

addAll

public boolean addAll(int index,
                      Collection<? extends E> c)
從指定的位置開始,將指定 collection 中的所有元素插入到此列表中。向右移動當前位於該位置的元素(如果有)以及所有後續元素(增加其索引)。新元素將按照指定 collection 的迭代器所返回的元素順序出現在列表中。

指定者:
介面 List<E> 中的 addAll
覆寫:
類別 AbstractList<E> 中的 addAll
參數:
index - 插入指定 collection 中的首個元素的位置索引
c - 套件含要添加到此列表中元素的 collection
返回:
如果此列表由於調用而發生更改,則返回 true
拋出:
IndexOutOfBoundsException - 如果索引超出範圍 (index < 0 || index > size())
NullPointerException - 如果指定的 collection 為 null

removeRange

protected void removeRange(int fromIndex,
                           int toIndex)
移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。向左移動所有後續元素(減小其索引)。此調用將列表縮短了 (toIndex - fromIndex) 個元素。(如果 toIndex==fromIndex,則此操作無效。)

覆寫:
類別 AbstractList<E> 中的 removeRange
參數:
fromIndex - 要移除的首個元素的索引
toIndex - 最後一個要移除的元素後面那個元素的索引
拋出:
IndexOutOfBoundsException - 如果 fromIndex 或 toIndex 超出範圍 (fromIndex < 0 || fromIndex >= size() || toIndex > size() || toIndex < fromIndex)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only