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 | Abschnitt
Stream-API in Java

bookComparable: Natürliche Reihenfolge von Daten

Swipe um das Menü anzuzeigen

In Java besteht häufig die Notwendigkeit, Objekte zu sortieren. Beispielsweise kann es in einer Liste von Büchern erforderlich sein, diese nach Titel, Autor oder Erscheinungsjahr zu ordnen.

Zur Bewältigung solcher Aufgaben stellt Java die Schnittstellen Comparable und Comparator bereit. Beide verfolgen das gleiche Ziel (Sortierung von Objekten), gehen dabei jedoch unterschiedlich vor. Im Folgenden werden sie einzeln erläutert.

Was ist Comparable?

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

Die Schlüsselmethode im Comparable Functional Interface 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, es sollen Book-Objekte anhand ihres Erscheinungsjahres verglichen werden.

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 kann die Reihenfolge gesteuert werden, in der Bücher sortiert werden—ob aufsteigend oder absteigend—abhängig von 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 Methode Book.

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

Abschnitt 1. Kapitel 8
some-alt