Rendimiento java.util.Vector

Miguel
06 de Junio del 2002
Hola a todos, he estado haciendo unas pruebas de rendimiento sobre la utilizadísima clase Vector y llego a unos resultados que no me puedo creer.

Sabemos que internamente un vector es un array de objetos y que si utilizamos el constructor por defecto se crea un array de tamaño 10. Con lo cual es aconsejable si sabemos el maximo tamaño que puede llegar a tener nuestro vector, inicilizarlo a este valor.

Entonces me decidí a hacer una prueba para comprobar los tiempos de respuesta utilizando uno u otro constructor. El codigo es:

...
Vector v = new Vector();

long inicial = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++){
v.add(new Integer(i));
}

int vSize = v.size();
for (int i = 1; i <= 1000000; i++){
v.get(vSize - i);
}
long finalizado = System.currentTimeMillis();

System.out.println("Vector: " + (finalizado - inicial));
...

si ejecutamos 6 veces el programa los tiempos de respuesta son: 4026, 4035, 4036, 4065, 4026, 4036.
Si cambiamos el constructor por defecto y utilizamos "Vector v = new Vector(1000000)" los tiempos de respuesta son: 4226, 4196, 4226, 4186, 4186, 4186.

Como vemos los tiempos son mayores utilizando la segunda opción, donde se supone que no es necesario crear mas que un unico array interno para almacenar todos los valores. He decompilado la clase Vector y nos ahorraríamos entrar por el codigo donde se hace el "System.arraycopy" con lo cual deberiamos tardar menos, pero ocurre todo lo contrario!!! No lo entiendo y lo veo y no lo creo.

Alguien me puede ayudar? Muchas gracias