Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Comparable: Naturlig Sortering av Data | Grunnleggende og Funksjonelle Egenskaper ved Stream API
Stream-API

bookComparable: Naturlig Sortering av Data

I Java er det vanlig å måtte sortere objekter. For eksempel, i en liste med bøker kan du ønske å sortere dem etter tittel, forfatter eller utgivelsesår.

For å håndtere slike oppgaver tilbyr Java grensesnittene Comparable og Comparator. Begge oppnår det samme målet (sortering av objekter), men de gjør det på ulike måter. La oss se nærmere på dem én etter én.

Hva er Comparable?

For eksempel blir Java-strenger sortert alfabetisk som standard fordi klassen String implementerer Comparable.

Hovedmetoden i Comparable funksjonelt grensesnitt er:

int compareTo(T o);

Denne metoden returnerer:

  • Et negativt tall hvis nåværende objekt er mindre enn det gitte objektet;
  • Null hvis objektene er like;
  • Et positivt tall hvis nåværende objekt er større enn det gitte objektet.

Eksempel: Sortering av bøker etter år

Anta at du ønsker å sammenligne Book-objekter basert på deres utgivelsesår.

For å oppnå dette kan Book-klassen implementere Comparable og overstyre compareTo-metoden. Ved å overstyre denne metoden definerer du hvordan Book-objekter skal sammenlignes, noe som direkte påvirker sorteringsatferden i metoder som Collections.sort().

Dette gir oss kontroll over rekkefølgen bøkene sorteres i—enten stigende eller synkende—basert på logikken 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) kalles, itererer Java gjennom listen og sammenligner elementene ved hjelp av compareTo-metoden definert i Book-klassen.

For hver sammenligning returnerer compareTo en numerisk verdi som bestemmer rekkefølgen på to bøker. Basert på disse verdiene omorganiserer sorteringsalgoritmen elementene slik at de er sortert etter stigende utgivelsesår.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 8

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 2.33

bookComparable: Naturlig Sortering av Data

Sveip for å vise menyen

I Java er det vanlig å måtte sortere objekter. For eksempel, i en liste med bøker kan du ønske å sortere dem etter tittel, forfatter eller utgivelsesår.

For å håndtere slike oppgaver tilbyr Java grensesnittene Comparable og Comparator. Begge oppnår det samme målet (sortering av objekter), men de gjør det på ulike måter. La oss se nærmere på dem én etter én.

Hva er Comparable?

For eksempel blir Java-strenger sortert alfabetisk som standard fordi klassen String implementerer Comparable.

Hovedmetoden i Comparable funksjonelt grensesnitt er:

int compareTo(T o);

Denne metoden returnerer:

  • Et negativt tall hvis nåværende objekt er mindre enn det gitte objektet;
  • Null hvis objektene er like;
  • Et positivt tall hvis nåværende objekt er større enn det gitte objektet.

Eksempel: Sortering av bøker etter år

Anta at du ønsker å sammenligne Book-objekter basert på deres utgivelsesår.

For å oppnå dette kan Book-klassen implementere Comparable og overstyre compareTo-metoden. Ved å overstyre denne metoden definerer du hvordan Book-objekter skal sammenlignes, noe som direkte påvirker sorteringsatferden i metoder som Collections.sort().

Dette gir oss kontroll over rekkefølgen bøkene sorteres i—enten stigende eller synkende—basert på logikken 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) kalles, itererer Java gjennom listen og sammenligner elementene ved hjelp av compareTo-metoden definert i Book-klassen.

For hver sammenligning returnerer compareTo en numerisk verdi som bestemmer rekkefølgen på to bøker. Basert på disse verdiene omorganiserer sorteringsalgoritmen elementene slik at de er sortert etter stigende utgivelsesår.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 8
some-alt