feed twitter facebook LinkedIn facebook

Java » Ordenar un Vector de forma alfabética con Java

marzo 25, 2009 por Víctor Cuervo 4 Comentarios Imprimir Imprimir

El otro día veíamos cómo ordenar un vector de string con Java. Si bien, teníamos como limitante que el método sort de Collections realizaba una ordenación atendiendo a los caracteres ASCII.

Mediante este ejemplo veremos cómo ordenar un Vector de forma alfabética con Java. Para ello nos aprovecharemos de que el método sort tiene dos formas de llamarse.

En la primera, y ya utilizada, se le pasa la lista que contiene los elementos a ordenar:

  1. public static <T extends Comparable<? super T>> void sort(List<T> list)

En la segunda, a parte de la lista de elementos, se le puede pasar una clase que sepa como ordenar dichos elementos y que por lo tanto los ordene a nuestro gusto. Atendiendo a nuestro ejemplo que los ordene de forma alfabética.

  1. public static <T> void sort(List<T> list, Comparator<? super T> c)

La clase que tiene la lógica de ordenación será una clase del tipo Comparator. Y es que Comparator es un interface a implementar por la clase que contenga la ordenación.

El interface Comparator define dos métodos. Uno de los cuales es .compare(), el cual recibe dos objetos de la lista y decide cual es mayor de los dos.

Definamos nuestra clase de comparación:

  1. class Comparador implements Comparator<String> {
  2. public int compare(String s1, String s2) {...}
  3. }

Como estamos ordenando un Vector de String, la clase que le pasamos al Template será String.

Volviendo al método .compare(), este deberá de devolver un valor negativo, cero o positivo. Atendiendo a las siguientes reglas:

  • negativo, si el primer argumento es más pequeño que el segundo.
  • cero, si los dos elementos son iguales.
  • positivo, si el primer elemento es más grande que el segundo.

Como a nosotros nos interesa realizar una ordenación alfabética que no identifique mayúsculas y minúsculas, lo primero que haremos será convertir las dos cadenas a minúsculas mediante el método .toLoweCase().

  1. s1.toLowerCase();

Y posteriormente utilizaremos el método .CompareTo de la clase String, el cual tiene el mismo comportamiento que el definido anteriormente para el método compare().

Así el código nos quedará de la siguiente forma:

  1. class Comparador implements Comparator<String> {
  2. public int compare(String s1, String s2)
  3. {
  4. return s1.toLowerCase().compareTo(s2.toLowerCase());
  5. }
  6. }

Ahora solo nos quedará llamar desde la clase que realiza la ordenación al método sort, pasándolo el Vector y la clase que hace la comparación:

  1. Vector<String> miVector = new Vector<String>();
  2. miVector.add("Victor");
  3. miVector.add("julio");
  4. miVector.add("amaya");
  5.  
  6. Collections.sort(miVector,new Comparador());
Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
Foro sobre Java Util
Foro sobre Java Util
tags: , , , , , , ,

Artículos relacionados:

4 comentarios »

RSS feed para los comentarios de esta entrada.TrackBack URI

  1. vanessa
    abril 23, 2009 #

    hola yo queria preguntar que si este codigo es util, para la hora de poder ordenar un determinado registro como una nomina que me este calculando n numeros de empleados ,lo q se desea ordenar es el numero de empleado ,en si este codigo me serviria para el oredenamiento de un registro!

    gracias

  2. p-say
    septiembre 25, 2009 #

    EL METODO COMPARE EN GENERAL CUAL ES SU FUNCION.
    Y EL METODO COMPARETO KE FUNCION GENERAL CUMPLE

  3. Hernan
    septiembre 28, 2009 #

    hola, ¿alguien sabe cómo ordenar teniendo en cuenta dos criterios de ordenación? Por ejemplo si tenemos una lista de objetos y éstos con dos atributos (nombre, edad), que me ordene por nombre y si el el nombre es igual que lo haga por edad.

  4. Linea de Codigo » Ordenando alfabéticamente con CASE_INSENSITIVE_ORDER
    enero 4, 2010 #

    [...] el artículo sobre cómo ordenar un vector de forma alfabética con Java veíamos como implementar un comparador alfabético utilizando el interface [...]

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*