En PC Resumen hablaremos de la clase Array en Java. Esta clase proporciona métodos estáticos para manipular tablas. Proporciona métodos como sort para ordenar, binarySearch para buscar en una tabla ordenada, equals para compararlas y fill para poner valores. Además los métodos sort y binarySearch están sobrecargados con versiones genéricas que permiten a los programadores ordenar y buscar en tablas que contengan objetos de cualquier tipo. En el programa siguiente podemos ver la utilización de estos métodos.
public class UsoArrays {
private int arrayInt[] = {1, 2, 3, 4, 5, 6};
private double arrayDouble[] = {8.4, 9.3, 0.2, 7.9, 3.4};
private int arrayIntPle[], copiaArrayInt[];
public UsArrays() {
arrayIntLleno = new int[10];
copiaArrayInt = new int[arrayInt.length];
Arrays.fill(arrayIntPle, 7);
Arrays.sort(arrayDouble);
System.arraycopy(arrayInt, 0, copiaArrayInt, 0, arrayInt.length);
}
public void imprimirArrays() {
System.out.print("arrayDouble: ");
for (double valorDouble : arrayDouble) {
System.out.printf("%.1f ", valorDouble);
}
System.out.print("\narrayInt: ");
for (int valorInt : arrayInt) {
System.out.printf("%d ", valorInt);
}
System.out.print("\narrayIntLleno: ");
for (int valorInt : arrayIntLleno) {
System.out.printf("%d ", valorInt);
}
System.out.print("\ncopiaArrayInt: ");
for (int valorInt : copiaArrayInt) {
System.out.printf("%d ", valorInt);
}
System.out.println("\n");
}
public int buscarUnInt(int valor) {
return Arrays.binarySearch(arrayInt, valor);
}
public void imprimirIgualdad() {
boolean b = Arrays.equals(arrayInt, copiaArrayInt);
System.out.printf("arrayInt %s copiaArrayInt\n", (b ? "==" : "!="));
b = Arrays.equals(arrayInt, arrayIntPle);
System.out.printf("arrayInt %s arrayIntPle\n", (b ? "==" : "!="));
}
public static void main(String args[]) {
UsoArrays usoArrays = new UsoArrays();
usoArrays.imprimirArrays();
usoArrays.imprimirIgualdad();
int ubicacion = usoArrays.buscarUnInt(5);
if (ubicacion >= 0) {
System.out.printf("Se ha encontrado el 5 en el elemento %d de arrayInt\n", ubicacion);
} else {
System.out.println("No se ha encontrado el 5 en arrayInt");
}
ubicacion = usoArrays.buscarUnInt(8763);
if (ubicacio >= 0) {
System.out.printf("Se ha encontrado el 8763 en el element %d de arrayInt\n", ubicacio);
} else {
System.out.println("No se ha encontrado el 8763 en arrayInt");
}
}
}
El método binarySearch funciona de la siguiente manera: si se encuentra el valor devuelve el índice del elemento, de lo contrario devuelve un valor negativo. El valor negativo se basa en el punto de inserción de la clave de búsqueda: el índice donde se debería insertar la clave si se tuviera que hacer una operación de inserción. Una vez el método determina el punto de inserción, cambia el signo de éste a negativo y le resta uno. Por ejemplo en el código anterior el punto de inserción para el valor 8763 se el índice 6, por lo tanto el método devuelve -7. Este valor de retorno es útil para agregar elementos en una tabla ordenada.
- Si pasamos una mesa desordenada el valor devuelto es indefinido.
- Si hay valores repetidos, el método no garantiza, cuál de ellos encuentra.