Interfaces Comparable y Comparator
Estas interfaces están orientadas a mantener ordenadas las listas, y también los sets y maps que deben mantener un orden. Para ello se dispone de las interfaces java.lang.Comparable y java.util.Comparator (obsérvese que pertenecen a packages diferentes).
La interface Comparable declara el método compareTo() de la siguiente forma:
public int compareTo(Object obj)
que compara su argumento implícito con el que se le pasa por ventana. Este método devuelve un entero negativo, cero o positivo según el argumento implícito (this) sea anterior, igual o posterior al objeto obj. Las listas de objetos de clases que implementan esta interface tienen un orden natural. En Java 1.2 esta interface está implementada -entre otras- por las clases String, Character,
Date, File, BigDecimal, BigInteger, Byte, Short, Integer, Long, Float y Double. Téngase en cuenta que la implementación estándar de estas clases no asegura un orden alfabético correcto con mayúsculas y minúsculas, y tampoco en idiomas distintos del inglés.
Si se redefine, el método compareTo() debe ser programado con cuidado: es muy conveniente que sea coherente con el método equals() y que cumpla la propiedad transitiva. Para más información, consultar la documentación del JDK 1.2.
Las listas y los arrays cuyos elementos implementan Comparable pueden ser ordenadas con los métodos static Collections.sort() y Arrays.sort().
La interface Comparator permite ordenar listas y colecciones cuyos objetos pertenecen a clases de tipo cualquiera. Esta interface permitiría por ejemplo ordenar figuras geométricas planas por el área o el perímetro. Su papel es similar al de la interface Comparable, pero el usuario debe siempre proporcionar una implementación de esta interface. Sus dos métodos se declaran en la forma:
public int compare(Object o1, Object o2)
public boolean equals(Object obj)
El objetivo del método equals() es comparar Comparators.
El método compare() devuelve un entero negativo, cero o positivo según su primer argumento sea anterior, igual o posterior al segundo. Los objetos que implementan Comparator pueden pasarse como argumentos al método Collections.sort() o a algunos constructores de las clases TreeSet y TreeMap, con la idea de que las mantengan ordenadas de acuerdo con dicho Comparator.
Es muy importante que compare() sea compatible con el método equals() de los objetos que hay que mantener ordenados. Su implementación debe cumplir unas condiciones similares a las de compareTo().
Java 1.2 dispone de clases capaces de ordenar cadenas de texto en diferentes lenguajes. Para ello se puede consultar la documentación sobre las clases CollationKey, Collator y sus clases derivadas, en el package java.text.
Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra