¿Cuáles son las diferencias entre ArrayList y Vector?

Resuelto KushalP asked hace 14 años • 7 respuestas

¿Cuáles son las diferencias entre las dos estructuras de datos ArrayList y Vector y dónde debería utilizar cada una de ellas?

KushalP avatar Jun 07 '10 06:06 KushalP
Aceptado

Diferencias

  • Los vectores están sincronizados, los ArrayLists no.
  • Métodos de crecimiento de datos

Utilice ArrayLists si no existe un requisito específico para utilizar vectores.

Sincronización

Si varios subprocesos acceden a una ArrayList simultáneamente, entonces debemos sincronizar externamente el bloque de código que modifica la lista, ya sea estructuralmente o simplemente modifica un elemento. Modificación estructural significa agregar o eliminar elemento(s) de la lista. Establecer el valor de un elemento existente no es una modificación estructural.

Collections.synchronizedListnormalmente se utiliza en el momento de la creación de la lista para evitar cualquier acceso no sincronizado accidental a la lista.

Crecimiento de datos

Internamente, tanto ArrayList como Vector conservan su contenido mediante un Array. Cuando se inserta un elemento en una ArrayList o un Vector, el objeto necesitará expandir su matriz interna si se queda sin espacio. Por defecto, un Vector duplica el tamaño de su matriz, mientras que ArrayList aumenta el tamaño de su matriz en un 50 por ciento.

Sev avatar Jun 06 '2010 23:06 Sev

Como dice la documentación, ay Vectoran ArrayListson casi equivalentes. La diferencia es que el acceso a a Vectorestá sincronizado, mientras que el acceso a an ArrayListno lo está. Lo que esto significa es que sólo un hilo puede llamar a métodos a Vectorla vez, y hay una ligera sobrecarga al adquirir el bloqueo; si usa un ArrayList, este no es el caso. Generalmente, querrás usar un ArrayList; en el caso de un solo subproceso, es una mejor opción y, en el caso de varios subprocesos, se obtiene un mejor control sobre el bloqueo. ¿Quiere permitir lecturas simultáneas? Bien. ¿Quiere realizar una sincronización para un lote de diez escrituras? También está bien. Requiere un poco más de cuidado por tu parte, pero probablemente sea lo que deseas. También tenga en cuenta que si tiene un ArrayList, puede usar la Collections.synchronizedListfunción para crear una lista sincronizada, obteniendo así el equivalente a un archivo Vector.

Antal Spector-Zabusky avatar Jun 06 '2010 23:06 Antal Spector-Zabusky

Vectores una clase rota que no es segura para subprocesos, a pesar de estar "sincronizada" y solo la utilizan estudiantes y otros programadores sin experiencia.

ArrayListes la implementación de Lista de referencia utilizada por profesionales y programadores experimentados.

Los profesionales que desean una implementación de Lista segura para subprocesos utilizan un archivo CopyOnWriteArrayList.

Bohemian avatar May 25 '2013 08:05 Bohemian

ArrayListEs más nuevo y entre un 20 y un 30 % más rápido.

Si no necesita algo explícitamente aparente en Vector, useArrayList

Oli avatar Jun 06 '2010 23:06 Oli