Java程式設計中的CopyOnWriteArrayList類


類宣告

public class CopyOnWriteArrayList<E>
extends Object
implements List<E>, RandomAccess, Cloneable, Serializable
  • CopyOnWriteArrayList是ArrayList的執行緒安全變體,其中可以更改ArrayList的操作(add、update、set方法)會建立底層陣列的克隆。

  • CopyOnWriteArrayList應該用於基於執行緒的環境中,在該環境中讀取操作非常頻繁,而更新操作很少見。

  • CopyOnWriteArrayList的迭代器永遠不會丟擲ConcurrentModificationException異常。

  • 對CopyOnWriteArrayList的任何型別的修改都不會在迭代器建立後反映在迭代過程中。

  • 在迭代期間不支援List修改方法,例如remove、set和add。這些方法將丟擲UnsupportedOperationException異常。

  • 可以向列表中新增null值。

CopyOnWriteArrayList方法

以下是CopyOnWriteArrayList類中可用的一些重要方法。

序號方法及描述
1void add(int index, Object element)
在此列表的指定位置index插入指定的元素。如果指定的索引超出範圍(index < 0 || index > size()),則丟擲IndexOutOfBoundsException異常。
2boolean add(Object o)
將指定的元素附加到此列表的末尾。
3boolean addAll(Collection c)
按指定集合的迭代器返回的順序,將指定集合中的所有元素附加到此列表的末尾。如果指定的集合為null,則丟擲NullPointerException異常。
4boolean addAll(int index, Collection c)
從指定位置開始,將指定集合中的所有元素插入到此列表中。如果指定的集合為null,則丟擲NullPointerException異常。
5void clear()
從此列表中刪除所有元素。
6Object clone()
返回此ArrayList的淺複製。
7boolean contains(Object o)
如果此列表包含指定的元素,則返回true。更正式地說,當且僅當此列表包含至少一個元素**e**使得(o==null ? e==null : o.equals(e))時返回true。
8Object get(int index)
返回此列表中指定位置的元素。如果指定的索引超出範圍(index < 0 || index >= size()),則丟擲IndexOutOfBoundsException異常。
9int indexOf(Object o)
返回此列表中指定元素的第一次出現的索引,如果列表不包含此元素,則返回-1。
10int lastIndexOf(Object o)
返回此列表中指定元素的最後一次出現的索引,如果列表不包含此元素,則返回-1。
11Object remove(int index)
從此列表中刪除指定位置的元素。如果索引超出範圍(index < 0 || index >= size()),則丟擲IndexOutOfBoundsException異常。
12Object set(int index, Object element)
用指定的元素替換此列表中指定位置的元素。如果指定的索引超出範圍(index < 0 || index >= size()),則丟擲IndexOutOfBoundsException異常。
13int size()
返回此列表中元素的數量。
14Object[] toArray()
返回一個包含此列表中所有元素的陣列,順序正確。如果指定的陣列為null,則丟擲NullPointerException異常。

示例

下面的程式演示了CopyOnWriteArrayList支援的幾種方法。

 線上演示

import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class Tester {
   public static void main(String args[]) {
      // create an array list
      CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList();
      System.out.println("Initial size of al: " + al.size());
      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");
      al.add(1, "A2");
      System.out.println("Size of al after additions: " + al.size());
      // display the array list
      System.out.println("Contents of al: " + al);
      // Remove elements from the array list
      al.remove("F");
      al.remove(2);
      System.out.println("Size of al after deletions: " + al.size());
      System.out.println("Contents of al: " + al);
      try {
         Iterator<String> iterator = al.iterator();
         while(iterator.hasNext()) {
            iterator.remove();
         }
      }catch(UnsupportedOperationException e) {
         System.out.println("Method not supported:");
      }
      System.out.println("Size of al: " + al.size());
   }
}

輸出

Initial size of al: 0
Size of al after additions: 7
Contents of al: [C, A2, A, E, B, D, F]
Size of al after deletions: 5
Contents of al: [C, A2, E, B, D]
Method not supported:
Size of al: 5

更新於:2020年6月26日

193次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告