1. Einleitung
2. Was sind Comparatoren und Comparables?
3. Wofür werden sie verwendet?
4. Welche Gemeinsamkeiten haben Comparatoren und Comparables?
5. Was ist der Unterschied zwischen Comparatoren und Comparables?
6. Wie funktioniert ein Comparator?
7. Wie sieht ein Comparator aus?
7.1. Beispiel für einen Comparator:
7.1.1. Benutzte Datenklasse:
7.1.2. ein Attribut Sortierung
7.1.3. mehrfach Attribut Sortierung
8. Wie funktioniert ein Comparable?
9. Wie sieht ein Comparable aus?
9.1. Beispiel für einen Comparable:
9.1.1. ein Attribut sortierung
9.1.2. mehrfach Attribut sortierung
10. Wie wendet man Comparatoren und Comparables an?
10.1. Anwendung von Comparatoren
10.2. Anwendung von Comparable
Dies ist der dritte von drei Posts, bevor wir uns mit dem Hauptthema befassen. In diesem Post gehen wir auf Comparatoren und Comparables ein. Den Fragestellungen, den wir uns hier stellen, sind:
Comparatoren sind Klassen, die das Interface java.util.Comparator<T>
implementieren. Comparables sind Klassen, die ihrerseits das Interface java.lang.Comparable<T>
implementieren. Wie in den vorherigen Posts erklärt, steht das
Beide Interfaces werden für das Sortieren von Collection-wertigen Datenobjekten eingesetzt.
Der Unterschied liegt in den Methodennamen und den Übergabeparametern der Methoden. Comparatoren benutzen die Methode compare()
und Comparables benutzen die Methode compareTo()
. Comparables werden in der Datenklasse implementiert. Somit sind Comparables die Standard Sortierfunktionalität der Datenklassen. Die Einschränkung die dabei existiert, ist die, dass man nur ein Comparable pro Datenklasse definieren kann. Der Vorteil, den die Comparatoren haben, liegt genau darin begründet, dass man mehr als nur eine Möglichkeit anbieten kann, wie man Datenklassen sortieren kann.
Der Comparator-Instanz werden zwei Objekte desselben Typs übergeben. Hier wird der Comparator-Instanz die Referenzen der beiden Objekte übergeben. In der Methode compare()
der Comparator-Klasse wird der Vergleich dieser beiden Datenklassen implementiert.
Die Funktion compare()
der Comparatoren ist definiert als:
Vergleicht Objekt O1 mit Objekt O2, indem die Referenz von Objekt O2 an die Methode compareTo()
des Objekts O1 übergeben wird. Der Vergleich der beiden Objekte wird in der Methode compareTo()
der Datenklasse bewerkstelligt.
Die Funktion compareTo()
der Comparables ist definiert durch:
Für das Sortieren von Listen wird die Klasse java.util.Collections
verwendet.
Diese enthält eine Static methode namens sort
, welche in zwei varianten existiert.
sort(List<T> list)
sort(List<T> list, Comparator<? super T> c)
Die sort
-Methode sortiert die übergebene Liste und nutzt als Vergleichsoperation die compare
-Methode des Comparators.
Die sort
-Methode verwendet an dieser Stelle die compareTo
-Methode des Comparable-Interfaces als Vergleichsoperation.
Stand: 5. November 2013