Comparator und Comparable

Geschrieben von Michael Biesmann & Fabian Markert

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

1. Einleitung

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:

  • Was sind Comparatoren und Comparables
  • Wofür werden sie verwendet
  • Welche Gemeinsamkeiten haben Comparatoren und Comparables
  • Was ist der Unterschied zwischen Comparatoren und Comparables
  • Wie funktioniert ein Comparator
  • Wie sieht ein Comparator aus
  • Wie funktioniert ein Comparable
  • Wie sieht ein Comparable aus
  • Wie wendet man Comparatoren und Comparables an

Teil 1 Teil 2

2. Was sind Comparatoren und Comparables?

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 hier für einen generischen Datentyp. Beide Interfaces existieren seit der Java Version 1.2. Die beiden Interfaces sind seit der Java Version 1.5 generisch.


3. Wofür werden sie verwendet?

Beide Interfaces werden für das Sortieren von Collection-wertigen Datenobjekten eingesetzt.


4. Welche Gemeinsamkeiten haben Comparatoren und Comparables?

  • beide sind Interfaces
  • beide arbeiten mit generischen Datentypen
  • beide werden gebraucht, um Listen/Mengen oder ähnliches zu sortieren
  • beide Vergleichsmethoden geben einen int Wert zurück


5. Was ist der Unterschied zwischen Comparatoren und Comparables?

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.


6. Wie funktioniert ein Comparator?

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.


7. Wie sieht ein Comparator aus?

Die Funktion compare() der Comparatoren ist definiert als:

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?

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.


9. Wie sieht ein Comparable aus?

Die Funktion compareTo() der Comparables ist definiert durch:

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?

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.

  1. sort(List<T> list)
  2. sort(List<T> list, Comparator<? super T> c)


10.1. Anwendung von Comparatoren

Die sort-Methode sortiert die übergebene Liste und nutzt als Vergleichsoperation die compare-Methode des Comparators.

10.2. Anwendung von Comparable

Die sort-Methode verwendet an dieser Stelle die compareTo-Methode des Comparable-Interfaces als Vergleichsoperation.


Stand: 5. November 2013