Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 프로그래밍에서 ArrayList와 CopyOnWriteArrayList의 차이점.

<시간/>

ArrayList와 CopyOnWriteArrayList는 모두 Java에서 List 인터페이스를 구현한 것입니다. 그러나 몇 가지 차이점도 있습니다.

다음은 ArrayList와 CopyOnWriteArrayList의 중요한 차이점입니다.

Sr. 아니요. 배열 목록 CopyOnWriteArrayList
1 동기화 ArrayList는 본질적으로 동기화되지 않습니다. 반면에 CopyOnWriteArrayList는 본질적으로 동기화됩니다. 즉, 한 번에 하나의 스레드만 개체에 액세스할 수 있습니다.
2 성능 ArrayList는 작업에 동기화가 없기 때문에 빠릅니다. 동기화로 인해 CopyOnWriteArrayList의 성능이 저하됩니다.
3 고장 ​​안전 ArrayList 반복자가 빠르게 실패하고 트래버스 중 수정 시 ConcurrentModificationException이 발생합니다. CopyOnWriteArrayList는 안전하고 트래버스 중에 수정할 수 있습니다.
4 요소 제거 ArrayList의 반복자는 반복하는 동안 제거 작업을 수행할 수 있습니다. CopyOnWriteArrayList는 반복하는 동안 제거 작업을 수행할 수 없습니다. 그렇지 않으면 런타임 예외 UnsupportedOperationException이 발생합니다.
5 자바 소개 ArrayList는 Java 버전 1.2에 추가되었으므로 CopyOnWriteArrayList보다 오래되었습니다. CopyOnWriteArrayList 클래스가 자바 버전 1.5(또는 자바 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