Ordenamiento de arreglos con la clase Arrays
Pues bien, esta vez vamos a tratar uno de los temas tÃpicos, en lo que a la programación se refiere, y me refiero al ordenamiento de arreglos. Esto no solo es un paso más en el desarrollo de la lógica, cuando estamos aprendiendo, sino una herramienta muy útil en el campo de la programación.Ahora bien, a nosotros nos enseñan los métodos tÃpicos de ordenamiento de arreglos (arrays o vectores, como quieran llamarlo), como lo son el Burbuja, el Quicksort, etc. Pero hay una clase de la API de utlierÃas de Java (java.util) que nos facilita esto, y es la clase Arrays. Y utilizandola es fácil ordenar un arreglo, con tan solo una instrucción.
La clase Arrays proporciona métodos (funciones) estáticos para manipular arreglos. Estos métodos son de alto nivel, como el sort para ordenar un arreglo, binarySearch para buscar en un arreglo ordenado, equals para comparar arreglos y fill para colocar valores en un arreglo. Y además estos métodos se sobrecargan para los tipos primitivos de arreglos (int, double, etc.) y para los arreglos Object (String, JPanel, Jbutton, etc.).
Para que todo esto quede claro vamos a realizar un fácil ejemplo:
import java.util.*;
public class UsoArrays {
private int numerosEnteros[] = { 1, 2, 3, 4, 5, 6 };
private double numerosDouble[] = { 8.4, 9.3, 0.2, 7.9, 3.4 };
private int llenoEnteros[], copiaNumerosEnteros[];
// inicializar los arreglos
public UsoArrays()
{
llenoEnteros = new int[ 10 ];
copiaNumerosEnteros = new int[ numerosEnteros.length ];
Arrays.fill( llenoEnteros, 7 ); // llenar con 7s
Arrays.sort( numerosDouble ); // ordenar numerosDouble en forma ascendente
// copiar el arreglo numerosEnteros en el arreglo copiaNumerosEnteros
System.arraycopy( numerosEnteros, 0, copiaNumerosEnteros, 0, numerosEnteros.length );
}
// mostrar los valores en cada arreglo
public void imprimirArreglos()
{
System.out.print( "numerosDouble: " );
for ( int cuenta = 0; cuenta <numerosDouble.length; cuenta++)
System.out.print( numerosDouble[ cuenta ] + " " );
System.out.print( "\nnumerosEnteros: " );
for ( int cuenta = 0; cuenta <numerosEnteros.length; cuenta++)
System.out.print( numerosEnteros[ cuenta ] + " " );
System.out.print( "\nllenoEnteros: " );
for ( int cuenta = 0; cuenta <llenoEnteros.length; cuenta++)
System.out.print( llenoEnteros[ cuenta ] + " " );
System.out.print( "\ncopiaNumerosEnteros: " );
for ( int cuenta = 0; cuenta <copiaNumerosEnteros.length; cuenta++)
System.out.print( copiaNumerosEnteros[ cuenta ] + " " );
System.out.println();
} // fin del método imprimirArreglos
// comparar el contenido de los arreglos
public void imprimirIgualdad()
{
boolean b = Arrays.equals( numerosEnteros, copiaNumerosEnteros );
System.out.println( "numerosEnteros " + ( b ? "==" : "!=" ) +
" copiaNumerosEnteros" );
b = Arrays.equals( numerosEnteros, llenoEnteros );
System.out.println( "numerosEnteros " + ( b ? "==" : "!=" ) +
" llenoEnteros" );
}
public int buscarUnEntero(int x)
{
return Arrays.binarySearch(numerosEnteros, x);
}
public static void main( String args[] )
{
UsoArrays usoArrays = new UsoArrays();
usoArrays.imprimirArreglos();
usoArrays.imprimirIgualdad();
int ubicacion = usoArrays.buscarUnEntero( 5 );
System.out.println( ( ubicacion >= 0 ? "Se encontro el 5 en el elemento " +
ubicacion : "No se encontro el 5" ) + " en numerosEnteros" );
ubicacion = usoArrays.buscarUnEntero( 8763 );
System.out.println( ( ubicacion >= 0 ? "Se encontro el 8763 en el elemento " +
ubicacion : "No se encontro el 8763" ) + " en numerosEnteros" );
}
} // fin de la clase UsoArrays;
En este sencillo ejemplo, se muestra el uso del método:
-
Arrays.fill(): que recibe un como argumentos un arreglo, y el valor con el que se va a rellenar el mismo.
-
Arrays.sort(): que recibe como argumento un arreglo, que será ordenado ascendentemente.
-
System.arraycopy(): que recibe 5 argumentos. El primer argumento (valoresEnteros) es el arreglo a partir del cual se van a copiar los elementos; el segundo argumento (0) es el Ãndice que especifica el punto de inicio en el rango de elementos que se van a copiar del arreglo; este valor puede ser cualquier Ãndice de arreglo válido. El tercer argumento (copiaNumerosEnteros) especifica el arreglo de destino que almacenará la copia. El cuarto argumento (0) especifica el Ãndice en el arreglo de destino, en donde deberá guardarse el primer elemento copiado. El último argumento especifica el numero de elementos a copiar del arreglo en el primer argumento. En este caso copiaremos todos los elementos en el arreglo.
-
Arrays.equals(): este método recibe como argumentos dos arreglos que serán comparados, y que retorna un valor boolean como resultado de la comparación. true si son iguales, false en caso contrario... si, ya se que es obvio, pero es que hay gente que... en fin.
Aunque me salà un poco del tema principal (ordenamiento de arreglos), creo que la esencia del mismo queda más que comprendida. Solo agregar que si hasta ahora estás aprendiendo a programar, es mejor que implementes los métodos de ordenamiento a mano, es decir, empleando la lógica y utilizando instrucciones como for, if, else, etc. ya que no tendrÃa gracia utilizar estos métodos sin siquiera tener un poco de experiencia... esta API la implementaron para hacernos las cosas más fáciles, pero no abuses.Saludos!!!








Anonymous dice:
Mayo 20th, 2007 a las 5:21 pm
RAYOS!!! -.-’
trate de correr el ejmeplo tuyo de arrays
en NetBEans 5.5 para una tarea
y pues me salen errores
en las lineas de “for”
para la otra podrias poner
ejemplos q ya nu tengan
erores plx
atte…
paw
si puedes contestarme:
garyta7@hotmail.com
Casidiablo dice:
Mayo 22nd, 2007 a las 9:47 am
JEje, lo que pasa es que se dañó el programa… me imagino que con la nueva version del Blogger….
El problema es que los for tenian signos < y pues Blogger los confunde con etiquetas HTML...

En breve lo soluciono
Casidiablo dice:
Mayo 28th, 2007 a las 3:55 pm
Solucionado!!!
Leonidas Orellana dice:
Junio 29th, 2007 a las 10:07 pm
hola que tal mira tengo un problema me dejaron un projecto es acer un sistema con PEPS osea primeras entradas y primeras salidas, la neta no se como le are pues no entiendo en si que es lo que el sistma debe hacer porfis ayudame mi correo es pajarito_leo@hotmail.com espero tu ayuda si puedes gracias
jcswach dice:
Julio 1st, 2007 a las 3:56 pm
PEPS…Primero en Entrar Primero en Salir…(llenar un arreglo y luego vaciarlo desde el primero que se ingreso)
valeroa dice:
Marzo 10th, 2008 a las 2:00 am
bueno, quisiera saber como ordenar un arreglo en java,utilizando NetBeans, el arreglo contiene pares de coordenadas para poder formar un pologon.
les agradeceria mucho su ayuda
carmen dice:
Junio 4th, 2008 a las 10:22 pm
jaja , me podrias ser un poco mas claro de lo que quieres dar a entender , sabeeeeeeeeeeeeeeeeeeees trate de ejecutar el programa y me envia error.
by.
que osoooooooooooooooooooooo.
jhon dice:
Junio 10th, 2008 a las 10:03 am
busco un programa en java usando el metodo shell porfavor quien lo epueda aser por favor en viame en mi msn