Vorlesung Informatik 2 - Teil A: Java Kurs

4.6 Das Interface Comparator

Mit Hilfe von Comparable kann man Objekte vergleichbar und damit sortierbar machen - aber nur für ein einziges bestimmtes Kriterium.

Wie aber kann man dafür sorgen, dass man für ein Objekt verschiedene Reihenfolgen für die Sortierung wählen kann?

Dazu gibt es neben Comparable noch das Interface: Comparator:

interface Comparator<T>{
     public int compare(T x, T y);
}

Die Methode compare vergleicht die Objekte x und y. Sie liefert :

  • 0 wenn x gleich y
  • -1 wenn x<y
  • 1 wenn x>y

Beispiel:

class Brett implements Comparable<Brett>{
     private int laenge, gewicht;
     public int compareTo(Brett b){
         if(this.gewicht==g.gewicht) return 0;
         if(this.gewicht<b.geqicht) return -1;
         return 1;
     }
     public static class LaengeComparator implements Comparator<Brett>{
          public int compare(Brett a, Brett b){
              return Integer.compare(a.laenge, b.laenge);
          }
     }
}

Das ist ein schönes Beispiel für eine statische innere Klasse. Der Comparator verwendet nicht this, sondern vergleicht zwei Objekte, die er als Parameter der Methode compare bekommt. Also ist diese Klasse unabhängig von Objekten der äußeren Klasse und deshalb static.

Die Klassen Long, Short, Integer, Byte, Float und Double haben je eine statische Methode compare.

Um nach Farbeigenschaften sortieren zu können, verwenden wir das Farbmodell HSB. Es besteht aus den Komponenten Hue (Farbton)  S aturation (Sättigung) Brightness (Helligkeit).

Diese drei Eigenschaften kann man für eine RGB Farbe so umrechnen:

float[] hsb=new float[3];
Color.RGBtoHSB(20,88,189,hsb);
hsb[0] enthält jetzt den Farbton, hsb[1] die Sättigung und hsb[2] die Helligkeit der Farbe mit RGB(20,88,189). Diese Werte liegen zwischen 0 und 1.

Lehrvideo  (YouTube)