Comparable und Comparator nicht ganz klar

Maik.Neumann

Aktives Mitglied
Juten Tach,

ich habe hier zwei Beispiele zum Sortieren von Objekten gefunden, deren UNterschied mir noch nicht ganz klar ist. Das erste Beispiel ist heir aufgeführt:

Java:
public class Number implements Comparable<Number> {
    private int value;

    public Number(int value) { this.value = value; }
    public int compareTo(Number anotherInstance) {
        return this.value - anotherInstance.value;
    }
}

public class Chair {
    private int weight;
    private int height;

    public Chair(int weight, int height) {
        this.weight = weight;
        this.height = height;
    }
    /* Omitting getters and setters */
}
class ChairWeightComparator implements Comparator<Chair> {
    public int compare(Chair chair1, Chair chair2) {
        return chair1.getWeight() - chair2.getWeight();
    }
}
class ChairHeightComparator implements Comparator<Chair> {
    public int compare(Chair chair1, Chair chair2) {
        return chair1.getHeight() - chair2.getHeight();
    }
}

Usage:

List<Number> numbers = new ArrayList<Number>();
...
Collections.sort(numbers);

List<Chair> chairs = new ArrayList<Chair>();
// Sort by weight:
Collections.sort(chairs, new ChairWeightComparator());
// Sort by height:
Collections.sort(chairs, new ChairHeightComparator());


Hier ist das zweite Beispiel und hier wird explizit mit 0, 1 und -1 als möglichen Rückgabewerten gearbeitet:

Java:
public class Bier {
 
  private String name;
  private String herkunft;
  private float inhalt;
 
  public Bier() {}
 
  public Bier(String name, String herkunft, float inhalt) {
 
    this.name = name;
    this.herkunft = herkunft;
    this.inhalt = inhalt;
  }
 
  public String getName() {
    return this.name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public String getHerkunft() {
    return this.herkunft;
  }
 
  public void setHerkunft(String herkunft) {
    this.herkunft = herkunft;
  }
 
  public float getInhalt() {
    return this.inhalt;
  }
 
  public void setInhalt(float inhalt) {
    this.inhalt = inhalt;
  }
 
  public String toString() {
    return this.name + " aus " + this.herkunft + " mit " + this.inhalt + " Litern";
  }
}

Java:
public class Bier implements Comparable<Bier> {
 
  ...
 
  @Override
  public int compareTo(Bier b) {
    if (b.getName() == null && this.getName() == null) {
      return 0;
    }
    if (this.getName() == null) {
      return 1;
    }
    if (b.getName() == null) {
      return -1;
    }
    return this.getName().compareTo(b.getName());
  }
}

Java:
public class BierNameComparator implements Comparator<Bier> {
 
  @Override
  public int compare(Bier b1, Bier b2) {
    if (b1.getName() == null && b2.getName() == null) {
      return 0;
    }
    if (b1.getName() == null) {
      return 1;
    }
    if (b2.getName() == null) {
      return -1;
    }
    return b1.getName().compareTo(b2.getName());
  }
}

Java:
public class ArraysAndCollectionsTest {
 
  public static void main(String[] args) {
 
    Comparator<Bier> comp = new BierComparator();
    Bier[] biere = {
        new Bier("Würzburger Hofbräu", "Würzburg", 0.5F),
        new Bier("Becks", "Bremen", 0.33F),
        new Bier("Paulaner", "München", 0.5F),
        new Bier("Distelhäuser", "Distelhausen", 0.33F) };
    System.out.println("Unsortiert:");
    System.out.println("-----------");
    for (Bier bier : biere) {
      System.out.println(bier);
    }
    Arrays.sort(biere, comp);
    System.out.println("Sortiert:");
    System.out.println("-----------");
    for (Bier bier : biere) {
      System.out.println(bier);
    }
  }
}


Warum arbeitet das erste Beispiele ohne explizite Rückgabewerte ud das zweite explizit mit 0, 1 und -1.

Kann es u.U. sein, dass in dem ersten Beispiel als Ergebnis durch die Berechnung einfach nur ein positiver oder negativer Wert zurückgegeben wird (oder auch die 0), der allerdings deutlich größer sein kann als 1 oder -1 und daran einfach die Sortierung vorgenommen wird?

Das ist das vielleicht schon der gesamte Unterschied?

Beste Grüße
Maik
 

diggaa1984

Top Contributor
Kann es u.U. sein, dass in dem ersten Beispiel als Ergebnis durch die Berechnung einfach nur ein positiver oder negativer Wert zurückgegeben wird (oder auch die 0), der allerdings deutlich größer sein kann als 1 oder -1 und daran einfach die Sortierung vorgenommen wird?

Ein Blick in die Doku bingt folgendes zum Vorschein:
Comparable#compareTo
Returns:
a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Comparator#compare
Returns:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

So gesehen, hast du Recht :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Comparable bzw Comparator Java Basics - Anfänger-Themen 5
B Comparable & Comparator Java Basics - Anfänger-Themen 9
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
H Comparable und Comparator Java Basics - Anfänger-Themen 22
S Comparator / Comparable ? Java Basics - Anfänger-Themen 3
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
L Interface & Comparable Java Basics - Anfänger-Themen 15
I Generics und Comparable Java Basics - Anfänger-Themen 14
O Comparable Generic Java Basics - Anfänger-Themen 24
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
Shizmo Frage zu Comparable Java Basics - Anfänger-Themen 4
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
F Comparable mit String Java Basics - Anfänger-Themen 5
F Objekte sortieren mit Comparable Java Basics - Anfänger-Themen 9
R Mehrere Interfaces(Comparable, ...) Java Basics - Anfänger-Themen 2
C Comparable Interface Java Basics - Anfänger-Themen 8
T Interface Interface Comparable Problem... Java Basics - Anfänger-Themen 2
H Interface Comparable Verständnisfrage Java Basics - Anfänger-Themen 6
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
J Probleme mit Comparable, compareTo() Java Basics - Anfänger-Themen 2
A Comparable interface Java Basics - Anfänger-Themen 26
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
P Comparable und Generics Java Basics - Anfänger-Themen 6
S comparable und equals Java Basics - Anfänger-Themen 7
M Frage zum Interface Comparable Java Basics - Anfänger-Themen 3
S Comparable Java Basics - Anfänger-Themen 4
S instanceof Comparable...geht nicht? Java Basics - Anfänger-Themen 20
M comparable funktion & reverse funktion Java Basics - Anfänger-Themen 8
H Mehrere Comparable Java Basics - Anfänger-Themen 4
D Comparable - Bucketsort / Radixsort? Java Basics - Anfänger-Themen 2
B Mehrere Werte mit Comparable sortieren Java Basics - Anfänger-Themen 14
S String umwandeln in Comparable Java Basics - Anfänger-Themen 6
R Comparable Interface Funktionalität selbst programmieren? Java Basics - Anfänger-Themen 3
A Interface Comparable Java Basics - Anfänger-Themen 2
J Comparable Java Basics - Anfänger-Themen 9
frau-u Wie vergleicht Comparable Java Basics - Anfänger-Themen 2
M Comparable - Bedingung erzwingen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
M Comparator Java Basics - Anfänger-Themen 25
M Comparator Java Basics - Anfänger-Themen 4
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
W Personen sortieren mit Comparator Java Basics - Anfänger-Themen 9
H Comparator Fehlermeldung Java Basics - Anfänger-Themen 5
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
A Priority Queue / Comparator Java Basics - Anfänger-Themen 6
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
J Comparator Java Basics - Anfänger-Themen 21
A Comparator Java Basics - Anfänger-Themen 4
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
V Comparator Java Basics - Anfänger-Themen 16
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
S Comparator für Generiks Java Basics - Anfänger-Themen 6
Helgon Interface Comparator wird nicht instanziert Java Basics - Anfänger-Themen 3
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
E Comparator sortiert falsch... Java Basics - Anfänger-Themen 2
M Comparator Java Basics - Anfänger-Themen 7
B OOP Logikhilfe zum Comparator 2 Java Basics - Anfänger-Themen 12
B OOP Logikhilfe zum Comparator Java Basics - Anfänger-Themen 11
G Comparator Problem Java Basics - Anfänger-Themen 5
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
Z Comparator Verständnisfrage Java Basics - Anfänger-Themen 5
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
A JTable sortieren mit einem Comparator Java Basics - Anfänger-Themen 2
G Objekte mit dem Attribut title mit Comparator sortieren Java Basics - Anfänger-Themen 5
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
G Comparator- methode compare exception werfen Java Basics - Anfänger-Themen 4
B interface Comparator Java Basics - Anfänger-Themen 4
M Hilfe bei der Erstellung der Comparator Klasse Java Basics - Anfänger-Themen 10
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
G Sortieren ohne Comparator? Java Basics - Anfänger-Themen 4
G Comparator Java Basics - Anfänger-Themen 10
S Frage zu Comparator Java Basics - Anfänger-Themen 3
G ArrayList und Comparator Java Basics - Anfänger-Themen 6
M Comparator - Sortierkriterium Java Basics - Anfänger-Themen 11
L Comparator Java Basics - Anfänger-Themen 5
T Problem mit Comparator! Java Basics - Anfänger-Themen 7
C Anstatt Spalte, Zeile mit Comparator sortieren . Java Basics - Anfänger-Themen 5
B Liste sortieren mit Comparator Java Basics - Anfänger-Themen 2
S JTable mit Comparator sortieren, die Frage ist wo? Java Basics - Anfänger-Themen 4
W Comparator Java Basics - Anfänger-Themen 3
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben