Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaプログラミングにおけるArrayListとCopyOnWriteArrayListの違い。


ArrayListとCopyOnWriteArrayListはどちらも、JavaでのListインターフェースの実装です。ただし、特定の違いもあります。

以下は、ArrayListとCopyOnWriteArrayListの重要な違いです。

一方、
Sr。いいえ。 キー ArrayList CopyOnWriteArrayList
1 同期 ArrayListは本質的に同期されていません。 CopyOnWriteArrayListは本質的に同期されます。つまり、一度に1つのスレッドのみがオブジェクトにアクセスできます。
2 パフォーマンス ArrayListは、操作に同期がないため高速です。 同期すると、CopyOnWriteArrayListのパフォーマンスが低下します。
3 フェイルセーフ ArrayListイテレータは高速で失敗し、トラバース中の変更時にConcurrentModificationExceptionをスローします。 CopyOnWriteArrayListはフェイルセーフであり、トラバース中に変更できます。
4 要素を削除 ArrayListのイテレータは、反復中に削除操作を実行できます。 CopyOnWriteArrayListは、反復中に削除操作を実行できません。実行しないと、実行時例外UnsupportedOperationExceptionがスローされます。
5 Javaの概要 ArrayListは、Javaバージョン1.2で追加されたため、CopyOnWriteArrayListよりも古いものです。 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

  1. JavaのArrayList.clear()とArrayList.removeAll()の違いは?

    JavaのArrayListクラスは、ListインターフェースのResizable-array実装です。 null値を許可します。 clear() このクラスのメソッドは、現在のListオブジェクトからすべての要素を削除します。 例 import java.util.ArrayList; public class ClearExample {    public static void main(String[] args){       //Instantiating an ArrayList object     &

  2. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり