Suscribirse al Feed
28May

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!!!

Etiquetas: ,

9 Comentarios para “Ordenamiento de arreglos con la clase Arrays”

« 1 2 Todos

  1. a gravatar

    Anonymous dice:  


    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

  2. a gravatar

    Casidiablo dice:  


    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 :)

  3. a gravatar

    Casidiablo dice:  


    Solucionado!!!

  4. a gravatar

    Leonidas Orellana dice:  


    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

  5. a gravatar

    jcswach dice:  


    PEPS…Primero en Entrar Primero en Salir…(llenar un arreglo y luego vaciarlo desde el primero que se ingreso)

  6. a gravatar

    valeroa dice:  


    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

  7. a gravatar

    carmen dice:  


    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.

  8. a gravatar

    jhon dice:  


    busco un programa en java usando el metodo shell porfavor quien lo epueda aser por favor en viame en mi msn

« 1 2 Todos

 

 

Antes de comentar... recuerda que no hago tareas

Te invito a subscribirte al feed RSS. ¿No sabes que es un lector de Feeds?

© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS