En PC Resumen vamos a hablar de como funciona la Clase Vector en Java y poner algún ejemplo práctico. Esta clase es prácticamente igual a ArrayList y es ésta la que se utiliza normalmente, excepto cuando queremos sincronización.
En cualquier momento, un objeto Vector contiene un número de elementos que es menor o igual que su capacidad. Si un Vector requiere más capacidad el programador puede incrementarla o se incrementa de forma predeterminada. Si no especificamos un incremento de capacidad o si especificamos uno que sea menor o igual que cero, el sistema duplica el tamaño del objeto cada vez que se necesite capacidad adicional.
- Insertar un elemento en un Vector que tenga espacio es operación relativamente rápida.
- Insertar un elemento en un Vector que no tenga espacio es operación relativamente lenta.
- Si el almacenamiento es fundamental, utilice el método trimToSize para recortar la capacidad a su medida exacta. Lógicamente cuando se agregue otro elemento, éste se verá forzado a crecer de forma dinámica.
En el siguiente programa vemos algunas operaciones típicas (para más operaciones consultar la API de Java):
import java.util.Vector;
import java.util.NoSuchElementException;
public class PruebaVector {
private static final String colores [] = {"rojo", "blanco", "azul"};
public PruebaVector() {
Vector<String> vector = new Vector<String>();
imprimirVector (vector);
for (String color: colores) {
vector.add(color);
}
imprimirVector(vector);
try {
System.out.printf("Primer elemento: %s\n", vector.firstElement());
System.out.printf("Último elemento: %s\n", vector.lastElement());
} // atrapa la excepción si el vector está vacío
catch (NoSuchElementException excepcion) {
excepcion.printStackTrace();
}
if (vector.contains("rojo")) {
System.out.printf("\n se ha encontrado \" rojo \" en el índice %d \n \n", vector.indexOf("rojo"));
} else {
System.out.println("\n ha encontrado \" rojo \" \n");
}
vector.remove("rojo");
System.out.println("se ha eliminado \" rojo \"");
imprimirVector(vector);
if (vector.contains("rojo")) {
System.out.printf ("\n se ha encontrado \" rojo \" en el índice %d \n \n", vector.indexOf ("rojo"));
} else {
System.out.println("\n ha encontrado \" rojo \"\n");
}
System.out.printf("\n Mida: %d \nCapacitat: %d\n", vector.size(), vector.capacity());
}
private void imprimirVector(Vector<String> vectorAImprimir) {
if (vectorAImprimir.isEmpty()) {
System.out.print("el vector está vacío");
} else {
System.out.print("el vector contiene: ");
for (String elemento: vectorAImprimir) {
System.out.printf("%s", elemento);
}
}
System.out.println("\n");
}
public static void main(String args[]) {
new PruebaVector();
}
}
Los métodos contains y indexOf realizan búsquedas lineales. Estas búsquedas son bastante ineficientes en vectores grandes. Si un programa tiene que buscar a menudo elementos en una colección es más eficiente utilizar alguna implementación de Map, la cual proporciona métodos de búsqueda de alta velocidad.