Diferencia entre ArrayList y Vector

ArrayList vs Vector

Un vector implementa matrices que pueden crecer / reducirse en tiempo de ejecución cuando se le agregan o eliminan algunos elementos. Se accede a sus elementos mediante un índice entero. Dos campos, capacidad e incremento de capacidad, caracterizan la gestión del almacenamiento de vectores. Implementa cuatro interfaces:
* Lista
* Acceso aleatorio
* Clonable
* Interfaces serializables



ArrayList, al igual que los vectores, también implementa cuatro interfaces. Nuevamente, al igual que los vectores, su tamaño puede cambiar durante el tiempo de ejecución. Además, tiene un campo llamado capacidad cuyo tamaño es tan grande como el tamaño de ArrayList.

Tanto los vectores como ArrayList son buenos para recuperar elementos de cualquier posición y también para insertar o eliminar elementos del final de la clase contenedora.
Desde la perspectiva de la API, tanto los vectores comoArrayList son muy similares. Entonces, ¿dónde radica exactamente la diferencia entre los dos? Los siguientes puntos arrojarán algo de luz sobre este asunto:

1. Sincronización: los vectores están sincronizados pero ArrayList no. Si agrega o elimina elementos de una ArrayList, se denomina modificación estructural. Cuando varios subprocesos acceden a una ArrayList simultáneamente con un bloque de código que modifica la lista, es necesario sincronizar externamente la lista. En resumen, los contenidos vectoriales son seguros para subprocesos, mientras que los de ArrayList no lo son. Si el requisito no menciona la recopilación segura para subprocesos, entonces se debe optar por ArrayList ya que la sincronización alcanza el rendimiento. Las ArrayLists no sincronizadas son rápidas.

2. Crecimiento de datos: tanto ArrayList como los elementos vectoriales se almacenan como matrices, pero los vectores tienen un tamaño predeterminado de 10 y ArrayList no tiene un tamaño predeterminado. Cuando se agrega un elemento a una ArrayList o un vector, existe la posibilidad de que cualquiera de las clases se quede sin espacio. En tal caso, por defecto un Vector duplica su tamaño mientras que el tamaño de ArrayList aumenta en un 50%. Puede establecer un valor de incremento en el caso de vectores que no es posible para ArrayList.

3. Atravesando los elementos: ArrayList tiene unventajaaquí, ya que puede acceder a sus elementos simplemente usando un índice. En el caso de los vectores, necesita crear un iterador para atravesar sus elementos.

Resumen:

1.Si la clase contenedora va a ser modificada por un solo hilo o alguna variable local, entonces debe usar una ArrayList.
2.Cuando varios subprocesos accedan a la clase contenedora, utilice vectores; de lo contrario, tendrá que realizar una sincronización manual.
3. Podemos especificar el tamaño del incremento con el vector y con ArrayList no podemos.
4. Un vector está sincronizado y una ArrayList no.
5. Un vector puede incrementar el tamaño al doble; ArrayList puede incrementarlo en un 50%.