Vector vs ArrayList en Java

ArrayList y Vectores implementan la interfaz List y ambos usan arrays (redimensionables dinámicamente) para su estructura de datos interna, como si se usara una array ordinaria. 

Sintaxis:

ArrayList: ArrayList<T> al = new ArrayList<T>();

Vector: Vector<T> v = new Vector<T>(); 

Vector vs. ArrayList en Java

S. No. Lista de arreglo Vector
1. ArrayList no está sincronizado. El vector está sincronizado.
2. ArrayList incrementa el 50 % del tamaño actual de la array si la cantidad de elementos excede la capacidad de ts. Los incrementos de vector 100% significan que se duplica el tamaño de la array si el número total de elementos excede su capacidad.
3. ArrayList no es una clase heredada. Se introduce en JDK 1.2. Vector es una clase heredada.
4. ArrayList es rápido porque no está sincronizado. Vector es lento porque está sincronizado, es decir, en un entorno de subprocesos múltiples, mantiene los otros subprocesos en un estado ejecutable o no ejecutable hasta que el subproceso actual libera el bloqueo del objeto.
5. ArrayList usa la interfaz Iterator para recorrer los elementos. Un vector puede usar la interfaz de iterador o la interfaz de enumeración para recorrer los elementos.

Diferencias significativas entre ArrayList y Vector:

  • Sincronización: Vector está sincronizado , lo que significa que solo un subproceso a la vez puede acceder al código, mientras que ArrayList no está sincronizado , lo que significa que varios subprocesos pueden trabajar en ArrayList al mismo tiempo. Por ejemplo, si un subproceso está realizando una operación de agregar, entonces puede haber otro subproceso realizando una operación de eliminación en un entorno de subprocesos múltiples. Si varios subprocesos acceden a ArrayList al mismo tiempo, debemos sincronizar el bloque del código que modifica la lista estructuralmente o permitir modificaciones de elementos simples. Modificación estructural significa la adición o eliminación de elementos de la lista. Establecer el valor de un elemento existente no es una modificación estructural.

ArrayList vs Vector Java

  • Rendimiento: ArrayList es más rápido. Dado que no está sincronizado, mientras que las operaciones vectoriales dan un rendimiento más lento ya que están sincronizadas (seguros para subprocesos), si un subproceso funciona en un vector, ha adquirido un bloqueo en él, lo que obliga a cualquier otro subproceso que desee trabajar en él. hay que esperar a que se libere el candado.
  • Crecimiento de datos: ArrayList y Vector crecen y se reducen dinámicamente para mantener un uso óptimo del almacenamiento, pero la forma en que cambian de tamaño es diferente. ArrayList incrementa el 50 % del tamaño actual de la array si la cantidad de elementos supera su capacidad, mientras que el vector aumenta el 100 %, lo que básicamente duplica el tamaño actual de la array.
  • Recorrido: Vector puede usar Enumeración e Iterador para recorrer elementos vectoriales, mientras que ArrayList solo puede usar Iterador para recorrer.
  • Aplicaciones: la mayoría de las veces, los programadores prefieren ArrayList sobre Vector porque ArrayList se puede sincronizar explícitamente usando Collections.synchronizedList .

Nota: ArrayList es preferible cuando no hay un requisito específico para usar vector.

Java

// Java Program to illustrate use
// of ArrayList and Vector in Java
 
import java.io.*;
import java.util.*;
 
class GFG
{
    public static void main (String[] args)
    {
        // creating an ArrayList
        ArrayList<String> al = new ArrayList<String>();
 
        // adding object to arraylist
        al.add("Practice.GeeksforGeeks.org");
        al.add("quiz.GeeksforGeeks.org");
        al.add("code.GeeksforGeeks.org");
        al.add("contribute.GeeksforGeeks.org");
 
        // traversing elements using Iterator'
        System.out.println("ArrayList elements are:");
        Iterator it = al.iterator();
        while (it.hasNext())
            System.out.println(it.next());
 
        // creating Vector
        Vector<String> v = new Vector<String>();
        v.addElement("Practice");
        v.addElement("quiz");
        v.addElement("code");
 
        // traversing elements using Enumeration
        System.out.println("\nVector elements are:");
        Enumeration e = v.elements();
        while (e.hasMoreElements())
            System.out.println(e.nextElement());
    }
}
Producción

ArrayList elements are:
Practice.GeeksforGeeks.org
quiz.GeeksforGeeks.org
code.GeeksforGeeks.org
contribute.GeeksforGeeks.org

Vector elements are:
Practice
quiz
code

¿Cómo elegir entre ArrayList y Vector? 

  • ArrayList no está sincronizado y no es seguro para subprocesos, mientras que los vectores sí lo son. Solo un subproceso puede llamar a métodos en un Vector, lo que es un poco complicado pero útil cuando la seguridad es una preocupación. Por lo tanto, en un caso de subproceso único, ArrayList es la opción obvia, pero cuando se trata de subprocesos múltiples, los vectores suelen ser preferibles.
  • Si no sabemos cuántos datos tendremos pero sabemos la tasa a la que crece, Vector tiene una ventaja ya que podemos establecer el valor de incremento en vectores.
  • ArrayList es más nuevo y más rápido. Si no tenemos requisitos explícitos para usar ninguno de ellos, usamos ArrayList sobre vector.

Este artículo es una contribución de Nitsdheerendra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *