Looking for java Keywords? Try Ask4Keywords

Java LanguageComparable et Comparateur


Syntaxe

  • la classe publique MyClass implémente Comparable <MyClass >
  • classe publique MyComparator implémente Comparator <SomeOtherClass >
  • public int compareTo (MyClass autre)
  • public int compare (SomeOtherClass o1, SomeOtherClass o2)

Remarques

Lorsque vous implémentez une compareTo(..) qui dépend d'un double , ne procédez pas comme suit:

public int comareTo(MyClass other) {
    return (int)(doubleField - other.doubleField); //THIS IS BAD
}

La troncature provoquée par le (int) coulée provoque parfois la méthode à retourner de façon incorrecte 0 au lieu d'un nombre positif ou négatif, et peut ainsi conduire à des comparaisons et des bogues de tri.

Au lieu de cela, l'implémentation correcte la plus simple consiste à utiliser Double.compare , en tant que tel:

public int comareTo(MyClass other) {
    return Double.compare(doubleField,other.doubleField); //THIS IS GOOD
} 

Une version non générique de Comparable<T> , simplement Comparable , existe depuis Java 1.2 . Outre l'interfaçage avec le code existant, il est toujours préférable d'implémenter la version générique Comparable<T> , car elle ne nécessite pas de conversion par comparaison.


Il est très courant qu'une classe soit comparable à elle-même, comme dans:

public class A implements Comparable<A>

Bien qu'il soit possible de rompre avec ce paradigme, soyez prudent lorsque vous le faites.


Un Comparator<T> peut toujours être utilisé sur des instances d'une classe si cette classe implémente Comparable<T> . Dans ce cas, la logique du Comparator sera utilisée; l'ordre naturel spécifié par l'implémentation Comparable sera ignoré.

Comparable et Comparateur Exemples Liés