Vector o ArrayList

Clase Vector o Clase ArrayList
¿Qué es mejor usar en Java? ¿Un Vector o un ArrayList?

  • Sincronización: La clase Vector es sincronizada (synchronized), por tanto, su contenido está protegido de otros hilos, es decir, es thread-safe(Wiki).

Y al contrario, los ArrayList no son sincronizados y por tanto no son thread-safe. Hay que tener en cuanta esto porque los vectores tienen un coste en tiempo de ejecución que no tienen los ArrayList. Si no necesitas thead-safe, usa ArrayList.

  • Tamaño de los datos:Ambas estructuras necesitan un Array para almacenar los datos internamente. Cuando se insertan datos, tanto unos como otros tienen que crecer para que no haya un desbordamiento. He aquí la diferencia:
    Los vectores crecen duplicando su espacio
    Los ArrayList crecen añadiendo el 50% de su espacio anterior.

:)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Habria que mencionar que a

Habria que mencionar que a Vector se le puede asignar una capacidad de incremento deseada :) , como:
new Vector(capacidad_inicial, incremento);

no siempre duplican su espacio :P , buen blog soulpower n.n , felicidades

=)

Saludos

Hola me parece muy interesante, pero podrías ser más especifico?...podrías demostrar lo que dices por favor :D no se tal vez con alguna prueba de profiling o midiendo la cantidad de memoria en heap que ocupen cada una de la estructuras antes descritas. Te lo agradeceríamos enormemente. Saludos

Ejemplo

Imagen de ezamudio

Corran este programita y vean los resultados en su propia compu. Van a variar incluso de una corrida a otra, pero consistentemente será bastante menor el tiempo que tarda el ArrayList en agregar 10mil elementos.

import java.util.Vector;
import java.util.ArrayList;

public class PruebaListas {

public static void main(String[] args) {
  long t0, t1, t2;
  Vector v = new Vector(10000, 50);
  ArrayList a = new ArrayList(10000);
  v.add(new Integer(0));
  a.add(new Integer(0));
  //Ahora agreguemos 10000 elementos al vector
  t0 = System.currentTimeMillis();
  for (int i = 0; i < 10000; i++) {
    v.add(Integer.toString(i));
  }
  t1 = System.currentTimeMillis();
  long tv = t1-t0;
  //Y luego 10000 elementos al arraylist
  t0 = System.currentTimeMillis();
  for (int i = 0; i < 10000; i++) {
    a.add(Integer.toString(i));
  }
  t1 = System.currentTimeMillis();
  long ta = t1-t0;
  System.out.printf("10K elementos en Vector tarda %d%n", tv);
  System.out.printf("10K elementos en ArrayList tarda %d%n", ta);
}

}

Yo creo que es ligeramente

Imagen de arturotena

Yo creo que es ligeramente menor el tiempo en ArrayList por que Vector es sincronizada.

Para definir el incremento

Imagen de arturotena

Para definir el incremento en un Vector se puede usar el contructor public Vector(int initialCapacity, int capacityIncrement)

Velocidad

Imagen de ezamudio

Sí, el punto era demostrar que ArrayList es más rápido porque no es sincronizado. Eso se menciona en el post original y es lo que un comentario posterior pedía demostración. Y el constructor que usé en el ejemplo para Vector, usa el parámetro de incremento en la capacidad del mismo.