Ordenación de un ArrayList en java

Los elementos de una lista se pueden ordenar con el método sort. El formato es el siguiente:
Collections.sort(lista);

Observa que sort es un método de clase que está definido en Collections.
Para poder utilizar este método es necesario incluir la línea

import java.util.Collections;

al principio del programa. A continuación se muestra un ejemplo del uso de sort.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Collections;
import java.util.ArrayList;
public class EjemploArrayList071 {
 public static void main(String[] args) {
  ArrayList<Integer> a = new ArrayList<Integer>();
  a.add(67);
  a.add(78);
  a.add(10);
  a.add(4);
  System.out.println("\nNúmeros en el orden original:");
  for (int numero: a) {
   System.out.println(numero);
  }
  Collections.sort(a);
  System.out.println("\nNúmeros ordenados:");
  for (int numero: a) {
   System.out.println(numero);
  }
 }
}
También es posible ordenar una lista de objetos. En este caso es necesario indicar el criterio de ordenación en la definición de la clase. En el programa principal, se utiliza el método sort igual que si se tratase de una lista de números o de palabras como se muestra a continuación.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import java.util.Collections;
import java.util.ArrayList;
public class EjemploArrayList08 {
 public static void main(String[] args) {
  ArrayList<Gato> g = new ArrayList<Gato>();
  g.add(new Gato("Garfield", "naranja", "mestizo"));
  g.add(new Gato("Pepe", "gris", "angora"));
  g.add(new Gato("Mauri", "blanco", "manx"));
  g.add(new Gato("Ulises", "marrón", "persa"));
  g.add(new Gato("Adán", "negro", "angora"));
  Collections.sort(g);
  System.out.println("\nDatos de los gatos ordenados por nombre:");
  for (Gato gatoAux: g) {
   System.out.println(gatoAux+"\n");
  }
 }
}

Ahora bien, en la definición de la clase Gato hay que indicar de alguna manera cómo se debe realizar la ordenación, ya que Java no sabe de antemano si los gatos se ordenan según el color, el nombre, el peso, etc.
Lo primero que hay que hacer es indicar que los objetos de la clase Gato se pueden comparar unos con otros. Para ello, cambiamos la siguiente línea:
public class Gato por esta otra: public class Gato implements Comparable<Gato>

 Lo siguiente y no menos importante es definir el método compareTo. Este método debe devolver un 0 si los elementos que se comparan son iguales, un número negativo si el primer elemento que se compara es menor que el segundo y un número positivo en caso contrario. Afortunadamente, las clases String, Integer, Double, etc. ya tienen implementado su propio método compareTo así que tenemos hecho lo más difícil. Lo único que deberemos escribir en nuestro código es un compareTo con los atributos que queremos comparar.

En el caso que nos ocupa, si queremos ordenar los gatos por nombre, tendremos que implementar el compareTo de la clase Gato de tal forma que nos devuelva el resultado del compareTo de los nombres de los gatos que estamos comparando, de la siguiente manera:
public int compareTo(Gato g) {return (this.nombre).compareTo(g.getNombre());
}

Si en lugar de ordenar por nombre, quisiéramos ordenar por raza, el método compareTo de la clase Gato sería el siguiente:
public int compareTo(Gato g) {return (this.raza).compareTo(g.getRaza());
}

A continuación se muestra la definición completa de la clase Gato.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Gato implements Comparable<Gato> {
 private String nombre;
 private String color;
 private String raza;
 public Gato(String nombre, String color, String raza) {
  this.nombre = nombre;
  this.color = color;
  this.raza = raza;
 }
 public String getNombre() {
  return nombre;
 }
 public String getRaza() {
  return raza;
 }
 public String toString() {
  return "Nombre: " + this.nombre + "\nColor: " + this.color + "\nRaza: " + this.raza;
 }
 public int compareTo(Gato g) {
  return (this.nombre).compareTo(g.getNombre());
 }
 public boolean equals(Gato g) {
  return (this.nombre).equals(g.getNombre());
 }
}

Compartir

0 Comment to "Ordenación de un ArrayList en java"

Publicar un comentario