Diferencia entre ArrayList y CopyOnWriteArrayList

Tanto ArrayList como CopyOnWriteArray implementan la interfaz List. Pero hay muchas diferencias entre ArrayList y CopyOnWriteArrayList:

  • CopyOnWriteArrayList crea una copia clonada de ArrayList subyacente, para cada operación de actualización en cierto punto, ambos se sincronizarán automáticamente, de lo cual se encarga JVM. Por lo tanto, no hay efecto para los subprocesos que realizan operaciones de lectura. Por lo tanto, la seguridad de subprocesos no existe en ArrayList, mientras que CopyOnWriteArrayList es seguro para subprocesos.
  • Al iterar el objeto ArrayList por un subproceso, si otro subproceso intenta realizar una modificación, obtendremos una excepción en tiempo de ejecución que dice ConcurrentModificationException. Donde como no obtendremos ninguna excepción en el caso de CopyOnWriteArrayList.
  • ArrayList se presenta en JDK 1.2, mientras que CopyOnWriteArrayList es presentado por personas de SUN en JDK 1.5.
  • El iterador de ArrayList puede realizar la operación de eliminación durante la iteración. Pero el iterador de CopyOnWriteArrayList no puede realizar la operación de eliminación durante la iteración; de lo contrario, generará una excepción en tiempo de ejecución UnsupportedOperationException.

    A continuación se muestra la implementación de este punto.

// Java program to illustrate ArrayList
import java.util.*;
  
class CopyDemo
{
    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"))
            {
                // Can remove
                itr.remove();
            }
        }
        System.out.println(l);
    }
}

Producción:

[A,C]
// Java program to illustrate CopyOnWriteArrayList
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.*;
  
class CopyDemo 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);
    }
}

Producción:

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

Publicación traducida automáticamente

Artículo escrito por Bishal Kumar Dubey y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *