Java编程中ArrayList和CopyOnWriteArrayList的区别。

javaobject oriented programmingprogramming更新于 2025/11/21 21:00:17

ArrayList和CopyOnWriteArrayList都是Java中List接口的实现。但也存在一些区别。

以下是ArrayList和CopyOnWriteArrayList之间的重要区别。

Sr.不。KeyArrayListCopyOnWriteArrayList
1同步ArrayList 本质上不是同步的。另一方面,CopyOnWriteArrayList 本质上是同步的,即一次只有一个线程可以访问该对象。
2性能ArrayList 速度很快,因为其操作中不需要同步。同步使 CopyOnWriteArrayList 性能变慢。
3故障安全性ArrayList 迭代器快速失败,并在遍历期间对修改抛出 ConcurrentModificationException。CopyOnWriteArrayList 是故障安全的,并允许在遍历期间进行修改。
4删除元素ArrayList 的迭代器可以在迭代过程中执行删除操作。CopyOnWriteArrayList 在迭代过程中不能执行删除操作,否则会抛出运行时异常 UnsupportedOperationException。
5Java 中的介绍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

相关文章


有用资源