Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Comparable: Natürliche Reihenfolge von Daten | Grundlagen und Funktionale Möglichkeiten der Stream-API
Stream-API

bookComparable: Natürliche Reihenfolge von Daten

In Java ist es üblich, Objekte zu sortieren. Beispielsweise kann in einer Liste von Büchern eine Sortierung nach Titel, Autor oder Erscheinungsjahr erforderlich sein.

Für solche Aufgaben stellt Java die Schnittstellen Comparable und Comparator bereit. Beide verfolgen das gleiche Ziel (Sortierung von Objekten), gehen dabei jedoch unterschiedlich vor. Schauen wir uns beide Ansätze im Detail an.

Was ist Comparable?

Zum Beispiel werden Java-Strings standardmäßig alphabetisch sortiert, da die Klasse String das Interface Comparable implementiert.

Die Schlüsselmethode im funktionalen Interface Comparable ist:

int compareTo(T o);

Diese Methode gibt zurück:

  • Eine negative Zahl, wenn das aktuelle Objekt kleiner als das übergebene Objekt ist;
  • Null, wenn die Objekte gleich sind;
  • Eine positive Zahl, wenn das aktuelle Objekt größer als das übergebene Objekt ist.

Beispiel: Bücher nach Jahr sortieren

Angenommen, der Vergleich von Book-Objekten soll anhand ihres Erscheinungsjahres erfolgen.

Dazu kann die Klasse Book das Interface Comparable implementieren und die Methode compareTo überschreiben. Durch das Überschreiben dieser Methode wird festgelegt, wie Book-Objekte verglichen werden, was das Sortierverhalten in Methoden wie Collections.sort() direkt beeinflusst.

Dadurch lässt sich steuern, in welcher Reihenfolge Bücher sortiert werden—ob aufsteigend oder absteigend—basierend auf der in compareTo implementierten Logik.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Wenn Collections.sort(books) aufgerufen wird, iteriert Java durch die Liste und vergleicht die Elemente mithilfe der in der Klasse compareTo definierten Book-Methode.

Für jeden Vergleich gibt compareTo einen numerischen Wert zurück, der die Reihenfolge von zwei Büchern bestimmt. Basierend auf diesen Werten ordnet der Sortieralgorithmus die Elemente so, dass sie nach aufsteigendem Erscheinungsjahr sortiert sind.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 8

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you show an example of how to implement Comparable in a Book class?

What happens if two books have the same publication year?

How does Comparable differ from Comparator?

Awesome!

Completion rate improved to 2.33

bookComparable: Natürliche Reihenfolge von Daten

Swipe um das Menü anzuzeigen

In Java ist es üblich, Objekte zu sortieren. Beispielsweise kann in einer Liste von Büchern eine Sortierung nach Titel, Autor oder Erscheinungsjahr erforderlich sein.

Für solche Aufgaben stellt Java die Schnittstellen Comparable und Comparator bereit. Beide verfolgen das gleiche Ziel (Sortierung von Objekten), gehen dabei jedoch unterschiedlich vor. Schauen wir uns beide Ansätze im Detail an.

Was ist Comparable?

Zum Beispiel werden Java-Strings standardmäßig alphabetisch sortiert, da die Klasse String das Interface Comparable implementiert.

Die Schlüsselmethode im funktionalen Interface Comparable ist:

int compareTo(T o);

Diese Methode gibt zurück:

  • Eine negative Zahl, wenn das aktuelle Objekt kleiner als das übergebene Objekt ist;
  • Null, wenn die Objekte gleich sind;
  • Eine positive Zahl, wenn das aktuelle Objekt größer als das übergebene Objekt ist.

Beispiel: Bücher nach Jahr sortieren

Angenommen, der Vergleich von Book-Objekten soll anhand ihres Erscheinungsjahres erfolgen.

Dazu kann die Klasse Book das Interface Comparable implementieren und die Methode compareTo überschreiben. Durch das Überschreiben dieser Methode wird festgelegt, wie Book-Objekte verglichen werden, was das Sortierverhalten in Methoden wie Collections.sort() direkt beeinflusst.

Dadurch lässt sich steuern, in welcher Reihenfolge Bücher sortiert werden—ob aufsteigend oder absteigend—basierend auf der in compareTo implementierten Logik.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344
package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }

Wenn Collections.sort(books) aufgerufen wird, iteriert Java durch die Liste und vergleicht die Elemente mithilfe der in der Klasse compareTo definierten Book-Methode.

Für jeden Vergleich gibt compareTo einen numerischen Wert zurück, der die Reihenfolge von zwei Büchern bestimmt. Basierend auf diesen Werten ordnet der Sortieralgorithmus die Elemente so, dass sie nach aufsteigendem Erscheinungsjahr sortiert sind.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 8
some-alt