Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa ArrayList và CopyOnWriteArrayList trong lập trình Java.

Cả ArrayList và CopyOnWriteArrayList đều là sự triển khai của giao diện Danh sách trong Java. Nhưng cũng có những khác biệt nhất định.

Sau đây là những điểm khác biệt quan trọng giữa ArrayList và CopyOnWriteArrayList.

Mặt khác,
Sr. Không. Phím ArrayList CopyOnWriteArrayList
1 Đồng bộ hóa ArrayList về bản chất không được đồng bộ hóa. CopyOnWriteArrayList được đồng bộ hóa về bản chất, tức là tại một thời điểm chỉ có một luồng có thể truy cập đối tượng.
2 Hiệu suất ArrayList nhanh vì không có đồng bộ hóa trong hoạt động của nó. Đồng bộ hóa làm cho CopyOnWriteArrayList hoạt động chậm.
3 Không an toàn Trình vòng lặp ArrayList bị lỗi nhanh chóng và ném ConcurrentModificationException vào sửa đổi trong quá trình duyệt. CopyOnWriteArrayList không an toàn và cho phép sửa đổi trong quá trình duyệt.
4 Xóa phần tử Một trình lặp của ArrayList có thể thực hiện thao tác xóa trong khi lặp. CopyOnWriteArrayList không thể thực hiện thao tác xóa trong khi lặp lại, nếu không, nó sẽ ném ra ngoại lệ thời gian chạy UnsupportedOperationException.
5 Giới thiệu trong Java ArrayList cũ hơn CopyOnWriteArrayList vì nó đã được thêm vào java phiên bản 1.2. Lớp CopyOnWriteArrayList đã được thêm vào phiên bản java 1.5 (hoặc java 5).
6 Gói Lớp ArrayList có trong gói java.util. Lớp CopyOnWriteArrayList có trong gói java.util.concurrent.

Ví dụ về ArrayList so với 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);
   }
}

Đầu ra

[A,C]

Ví dụ

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);
   }
}

Đầu ra

A
B
Exception in thread "main" java.lang.UnsupportedOperationException