Java LanguageVergleichbar und Vergleicher


Syntax

  • public class MyClass implementiert Comparable <MyClass >
  • public class MyComparator implementiert Comparator <SomeOtherClass >
  • public int compareTo (Meine andere)
  • public int compare (SomeOtherClass o1, SomeOtherClass o2)

Bemerkungen

Wenn Sie eine compareTo(..) -Methode implementieren, die von einem double abhängig ist, gehen Sie nicht wie folgt vor:

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

Die durch die (int) -Umgabe verursachte (int) führt dazu, dass die Methode manchmal falsch anstatt einer positiven oder negativen Zahl 0 zurückgibt, was zu Vergleichen und Sortieren von Fehlern führen kann.

Stattdessen ist die einfachste korrekte Implementierung die Verwendung von Double.compare als solchen:

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

Eine nicht generische Version von Comparable<T> , einfach Comparable , existiert seit Java 1.2 . Abgesehen von der Anbindung an älteren Code ist es immer besser, die generische Version Comparable<T> zu implementieren, da kein Casting beim Vergleich erforderlich ist.


Es ist sehr Standard, dass eine Klasse mit sich selbst vergleichbar ist, wie in:

public class A implements Comparable<A>

Es ist zwar möglich, von diesem Paradigma abzubrechen, seien Sie jedoch vorsichtig.


Ein Comparator<T> kann weiterhin für Instanzen einer Klasse verwendet werden, wenn diese Klasse Comparable<T> implementiert. In diesem Fall wird die Logik des Comparator verwendet. Die von der Comparable Implementierung angegebene natürliche Reihenfolge wird ignoriert.

Vergleichbar und Vergleicher Verwandte Beispiele