Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Comparable: Naturlig Rækkefølge af Data | Grundlæggende og Funktionelle Kapaciteter af Stream API
Stream API

bookComparable: Naturlig Rækkefølge af Data

I Java er det almindeligt at skulle sortere objekter. For eksempel, i en liste over bøger, kan det være nødvendigt at sortere dem efter titel, forfatter eller udgivelsesår.

For at håndtere sådanne opgaver tilbyder Java Comparable- og Comparator-grænsefladerne. Begge opnår det samme mål (sortering af objekter), men de gør det på forskellige måder. Lad os gennemgå dem én ad gangen.

Hvad er Comparable?

For eksempel sorteres Java-strenge alfabetisk som standard, fordi String-klassen implementerer Comparable.

Den centrale metode i Comparable funktionelle interface er:

int compareTo(T o);

Denne metode returnerer:

  • Et negativt tal hvis det aktuelle objekt er mindre end det givne objekt;
  • Nul hvis objekterne er lige;
  • Et positivt tal hvis det aktuelle objekt er større end det givne objekt.

Eksempel: Sortering af bøger efter år

Antag, at du ønsker at sammenligne Book-objekter baseret på deres udgivelsesår.

For at opnå dette kan Book-klassen implementere Comparable og overskrive compareTo-metoden. Ved at overskrive denne metode definerer du, hvordan Book-objekter skal sammenlignes, hvilket direkte påvirker sorteringsadfærden i metoder som Collections.sort().

Dette gør det muligt at kontrollere rækkefølgen, hvori bøgerne sorteres—enten stigende eller faldende—baseret på den logik, du implementerer i compareTo.

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 + ")"; } }

Når Collections.sort(books) kaldes, itererer Java gennem listen og sammenligner elementerne ved hjælp af compareTo-metoden defineret i Book-klassen.

Ved hver sammenligning returnerer compareTo en numerisk værdi, der bestemmer rækkefølgen af to bøger. Baseret på disse værdier omarrangerer sorteringsalgoritmen elementerne, så de er ordnet efter stigende udgivelsesår.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 8

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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: Naturlig Rækkefølge af Data

Stryg for at vise menuen

I Java er det almindeligt at skulle sortere objekter. For eksempel, i en liste over bøger, kan det være nødvendigt at sortere dem efter titel, forfatter eller udgivelsesår.

For at håndtere sådanne opgaver tilbyder Java Comparable- og Comparator-grænsefladerne. Begge opnår det samme mål (sortering af objekter), men de gør det på forskellige måder. Lad os gennemgå dem én ad gangen.

Hvad er Comparable?

For eksempel sorteres Java-strenge alfabetisk som standard, fordi String-klassen implementerer Comparable.

Den centrale metode i Comparable funktionelle interface er:

int compareTo(T o);

Denne metode returnerer:

  • Et negativt tal hvis det aktuelle objekt er mindre end det givne objekt;
  • Nul hvis objekterne er lige;
  • Et positivt tal hvis det aktuelle objekt er større end det givne objekt.

Eksempel: Sortering af bøger efter år

Antag, at du ønsker at sammenligne Book-objekter baseret på deres udgivelsesår.

For at opnå dette kan Book-klassen implementere Comparable og overskrive compareTo-metoden. Ved at overskrive denne metode definerer du, hvordan Book-objekter skal sammenlignes, hvilket direkte påvirker sorteringsadfærden i metoder som Collections.sort().

Dette gør det muligt at kontrollere rækkefølgen, hvori bøgerne sorteres—enten stigende eller faldende—baseret på den logik, du implementerer i compareTo.

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 + ")"; } }

Når Collections.sort(books) kaldes, itererer Java gennem listen og sammenligner elementerne ved hjælp af compareTo-metoden defineret i Book-klassen.

Ved hver sammenligning returnerer compareTo en numerisk værdi, der bestemmer rækkefølgen af to bøger. Baseret på disse værdier omarrangerer sorteringsalgoritmen elementerne, så de er ordnet efter stigende udgivelsesår.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 8
some-alt