Java编程中ArrayList和CopyOnWriteArrayList的区别。
javaobject oriented programmingprogramming更新于 2025/11/21 21:00:17
ArrayList和CopyOnWriteArrayList都是Java中List接口的实现。但也存在一些区别。
以下是ArrayList和CopyOnWriteArrayList之间的重要区别。
| Sr.不。 | Key | ArrayList | CopyOnWriteArrayList |
|---|---|---|---|
| 1 | 同步 | ArrayList 本质上不是同步的。 | 另一方面,CopyOnWriteArrayList 本质上是同步的,即一次只有一个线程可以访问该对象。 |
| 2 | 性能 | ArrayList 速度很快,因为其操作中不需要同步。 | 同步使 CopyOnWriteArrayList 性能变慢。 |
| 3 | 故障安全性 | ArrayList 迭代器快速失败,并在遍历期间对修改抛出 ConcurrentModificationException。 | CopyOnWriteArrayList 是故障安全的,并允许在遍历期间进行修改。 |
| 4 | 删除元素 | ArrayList 的迭代器可以在迭代过程中执行删除操作。 | CopyOnWriteArrayList 在迭代过程中不能执行删除操作,否则会抛出运行时异常 UnsupportedOperationException。 |
| 5 | Java 中的介绍 | ArrayList 比 CopyOnWriteArrayList 更老,因为它是在 Java 1.2 版中添加的。 | CopyOnWriteArrayList 类是在 Java 1.5 版(或 Java 5)中添加的。 |
| 6 | 包 | ArrayList 类存在于 java.util 包中。 | CopyOnWriteArrayList 类存在于 java.util.concurrent 包中。 |
ArrayList 与 CopyOnWriteArrayList 的示例
ArrayListDemo.java
import java.util.*;
public class ArrayListDemo{
public static void main(String[] args){
ArrayList l = new ArrayList();
l.add("A");
l.add("B");
l.add("C");
Iterator itr = l.iterator();
while (itr.hasNext()){
String s = (String)itr.next();
if (s.equals("B")){
itr.remove();
}
}
System.out.println(l);
}
}
输出
[A,C]
示例
CopyOnWriteArrayListDemo.java
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.*;
class CopyOnWriteArrayListDemo extends Thread {
static CopyOnWriteArrayList l = new CopyOnWriteArrayList();
public static void main(String[] args) throws InterruptedException{
l.add("A");
l.add("B");
l.add("C");
Iterator itr = l.iterator();
while (itr.hasNext()){
String s = (String)itr.next();
System.out.println(s);
if (s.equals("B")){
// Throws RuntimeException
itr.remove();
}
Thread.sleep(1000);
}
System.out.println(l);
}
}
输出
A B Exception in thread "main" java.lang.UnsupportedOperationException
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

