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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP