Java常用API 之 java.util.ArrayList(附解析和示例)_13

java.util.ArrayList的繼承關係:

java.lang.Object
      java.util.AbstractCollection<E>
          java.util.AbstractList<E>
              java.util.ArrayList<E>
public class ArrayList<E>//直接繼承自AbstractList類,並且實現了List<E>接口
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
    ArrayList是List 接口的大小可變數組的實現。實現了所有可選列表操作,並允許包括 null 在內的所有元素。除了實現 List 接口外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。(此類大致上等同於 Vector 類,除了此類是不同步的。)

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

    每個 ArrayList 實例都有一個容量。該容量是指用來存儲列表元素的數組的大小。它總是至少等於列表的大小。隨着向 ArrayList 中不斷添加元素,其容量也自動增長。並未指定增長策略的細節,因爲這不只是添加元素會帶來分攤固定時間開銷那樣簡單。在添加大量元素前,應用程序可以使用 ensureCapacity 操作來增加 ArrayList 實例的容量。這可以減少遞增式再分配的數量。

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

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

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

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

構造函數
ArrayList( ) 

構造一個初始容量爲 10 的空列表。

例:ArrayList<Integer> list = new ArrayList<Integer>();

ArrayList(Collection<? extends E> c) 構造一個包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。
對象方法
public void ensureCapacity(int minCapacity)如有必要,增加此 ArrayList 實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數。
public int size( )返回此列表中的元素數。
public boolean isEmpty( )如果此列表中沒有元素,則返回 true
public boolean contains(Object o)如果此列表中包含指定的元素,則返回 true。更確切地講,當且僅當此列表包含至少一個滿足 (o==null ? e==null : o.equals(e)) 的元素 e 時,則返回 true。
public int indexOf(Object o)返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。更確切地講,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i ,如果不存在此類索引,則返回 -1。
public Object clone( )返回此 ArrayList 實例的淺表副本。(不復制這些元素本身。)
public Object[ ] toArray( )按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組。
由於此列表不維護對返回數組的任何引用,,因而它將是“安全的”。(換句話說,此方法必須分配一個新的數組)。因此,調用者可以自由地修改返回的數組。


此方法擔當基於數組的 API 和基於 collection 的 API 之間的橋樑。
public <T> T[ ] toArray(T[ ] a)按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。如果指定的數組能容納列表,則將該列表返回此處。否則,將分配一個具有指定數組的運行時類型和此列表大小的新數組。
如果指定的數組能容納隊列,並有剩餘的空間(即數組的元素比隊列多),那麼會將數組中緊接 collection 尾部的元素設置爲 null。(僅 在調用者知道列表中不包含任何 null 元素時才能用此方法確定列表長度)。
public E get(int index)返回此列表中指定位置上的元素。
public E set(int index, E element)用指定的元素替代此列表中指定位置上的元素。
public boolean add(E e)將指定的元素添加到此列表的尾部。
public void add(int index, E element)將指定的元素插入此列表中的指定位置。向右移動當前位於該位置的元素(如果有)以及所有後續元素(將其索引加 1)。
public boolean addAll(Collection<? extends E> c)按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部。如果正在進行此操作時修改指定的 collection ,那麼此操作的行爲是不確定的。(這意味着如果指定的 collection 是此列表且此列表是非空的,那麼此調用的行爲是不確定的)。
public boolean addAll(int index,
Collection<? extends E> c)
從指定的位置開始,將指定 collection 中的所有元素插入到此列表中。向右移動當前位於該位置的元素(如果有)以及所有後續元素(增加其索引)。新元素將按照指定 collection 的迭代器所返回的元素順序出現在列表中。
public E remove(int index)移除此列表中指定位置上的元素。向左移動所有後續元素(將其索引減 1)。
public boolean remove(Object o)移除此列表中首次出現的指定元素(如果存在)。如果列表不包含此元素,則列表不做改動
  
  
  
  

發佈了52 篇原創文章 · 獲贊 47 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章