ArrayList vs Vector
Un vector implementa matrices que pueden aumentar / disminuir en el tiempo de ejecución cuando se agregan o eliminan algunos elementos. Se accede a sus elementos utilizando un índice entero. Dos campos: capacidad y aumento de capacidad, caracterizan la gestión de almacenamiento vectorial. Implementa cuatro interfaces:
* Lista
* Acceso aleatorio
* Cloneable
* Interfaces serializables
ArrayList, al igual que los vectores, también implementa cuatro interfaces. De nuevo, 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 del ArrayList.
Ambos vectores y ArrayList son buenos para recuperar elementos desde cualquier posición y también para insertar o eliminar elementos del final de la clase de contenedor.
Desde la perspectiva de la API, tanto los vectores como ArrayList son muy similares. Entonces, ¿dónde está 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 lo está. Si agrega o elimina elementos de un ArrayList, se denomina modificación estructural. Cuando varios subprocesos acceden a un ArrayList simultáneamente con un bloque de código que modifica la lista, entonces uno necesita sincronizar externamente la lista. En resumen, los contenidos vectoriales son seguros para subprocesos, mientras que los ArrayList no lo son. Si el requisito no menciona la recopilación segura para subprocesos, entonces uno debería optar por ArrayList ya que la sincronización alcanza el rendimiento. ArrayLists no sincronizados son rápidos.
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 uno agrega un elemento a un ArrayList o a un vector, existe la posibilidad de que cualquiera de las clases se quede sin espacio. En tal caso, de forma predeterminada, 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. Recorrer los elementos: ArrayList tiene una ventaja aquí, ya que puede acceder a sus elementos simplemente usando un índice. En el caso de vectores, necesita crear un iterador para atravesar sus elementos.
Resumen:
1.Si la clase contenedor debe ser modificada por un solo hilo o alguna variable local, entonces debe usar un ArrayList.
2.Cuando se accede a la clase contenedora por varios subprocesos, entonces use vectores, de lo contrario tendrá que hacer la sincronización manual.
3. Podemos especificar el tamaño del incremento con el vector y con la ArrayList no podemos.
4. Un vector está sincronizado y un ArrayList no está.
5. Un vector puede incrementar el tamaño por doble; ArrayList puede incrementarlo en un 50%..