Java 中的 ArrayList 和 CopyOnWriteArrayList 的區別
以下是 Java 中 ArrayList 和 CopyOnWriteArrayList 類的顯著差異。
ArrayList | CopyOnWriteArrayList | |
---|---|---|
同步 | ArrayList 不同步。 | CopyOnWriteArrayList 同步。 |
執行緒安全 | ArrayList 不是執行緒安全的。 | CopyOnWriteArrayList 是執行緒安全的。 |
迭代器型別 | ArrayList 迭代器是快速失敗的,如果在迭代過程中發生併發修改,ArrayList 會丟擲 ConcurrentModificationException。 | CopyOnWriteArrayList 是快速安全的並且永遠不會在迭代過程中丟擲 ConcurrentModificationException。其原因是 CopyOnWriteArrayList 每當被修改時都會建立一個新的 Arraylist |
刪除操作 | ArrayList 迭代器支援在迭代過程中刪除元素。 | 如果嘗試在迭代過程中刪除元素,CopyOnWriteArrayList.remove() 方法會丟擲異常。 |
效能 | ArrayList 更快。 | CopyOnWriteArrayList 比 ArrayList 慢。 |
從 Java 版本開始 | 1.2 | 1.5 |
範例
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
廣告