Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Comparable: Ordinamento Naturale dei Dati | Fondamenti e Capacità Funzionali dello Stream API
Stream API

bookComparable: Ordinamento Naturale dei Dati

In Java, è comune dover ordinare oggetti. Ad esempio, in una lista di libri, potresti volerli ordinare per titolo, autore o anno di pubblicazione.

Per gestire questi compiti, Java fornisce le interfacce Comparable e Comparator. Entrambe raggiungono lo stesso obiettivo (ordinare oggetti) ma lo fanno in modi diversi. Analizziamole una per una.

Che cos'è Comparable?

Ad esempio, le stringhe Java sono ordinate alfabeticamente per impostazione predefinita perché la classe String implementa Comparable.

Il metodo chiave nell'interfaccia funzionale Comparable è:

int compareTo(T o);

Questo metodo restituisce:

  • Un numero negativo se l'oggetto corrente è minore di quello fornito;
  • Zero se gli oggetti sono uguali;
  • Un numero positivo se l'oggetto corrente è maggiore di quello fornito.

Esempio: Ordinamento dei Libri per Anno

Supponiamo di voler confrontare oggetti Book in base al loro anno di pubblicazione.

Per ottenere questo risultato, la classe Book può implementare Comparable e sovrascrivere il metodo compareTo. Sovrascrivendo questo metodo, si definisce come devono essere confrontati gli oggetti Book, influenzando direttamente il comportamento di ordinamento in metodi come Collections.sort().

Questo consente di controllare l'ordine in cui i libri vengono ordinati—sia in ordine crescente che decrescente—in base alla logica implementata in 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 + ")"; } }

Quando viene chiamato Collections.sort(books), Java itera attraverso la lista, confrontando gli elementi utilizzando il metodo compareTo definito nella classe Book.

Per ogni confronto, compareTo restituisce un valore numerico che determina l'ordine di due libri. In base a questi valori, l'algoritmo di ordinamento riorganizza gli elementi affinché siano ordinati per anno di pubblicazione crescente.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 8

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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: Ordinamento Naturale dei Dati

Scorri per mostrare il menu

In Java, è comune dover ordinare oggetti. Ad esempio, in una lista di libri, potresti volerli ordinare per titolo, autore o anno di pubblicazione.

Per gestire questi compiti, Java fornisce le interfacce Comparable e Comparator. Entrambe raggiungono lo stesso obiettivo (ordinare oggetti) ma lo fanno in modi diversi. Analizziamole una per una.

Che cos'è Comparable?

Ad esempio, le stringhe Java sono ordinate alfabeticamente per impostazione predefinita perché la classe String implementa Comparable.

Il metodo chiave nell'interfaccia funzionale Comparable è:

int compareTo(T o);

Questo metodo restituisce:

  • Un numero negativo se l'oggetto corrente è minore di quello fornito;
  • Zero se gli oggetti sono uguali;
  • Un numero positivo se l'oggetto corrente è maggiore di quello fornito.

Esempio: Ordinamento dei Libri per Anno

Supponiamo di voler confrontare oggetti Book in base al loro anno di pubblicazione.

Per ottenere questo risultato, la classe Book può implementare Comparable e sovrascrivere il metodo compareTo. Sovrascrivendo questo metodo, si definisce come devono essere confrontati gli oggetti Book, influenzando direttamente il comportamento di ordinamento in metodi come Collections.sort().

Questo consente di controllare l'ordine in cui i libri vengono ordinati—sia in ordine crescente che decrescente—in base alla logica implementata in 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 + ")"; } }

Quando viene chiamato Collections.sort(books), Java itera attraverso la lista, confrontando gli elementi utilizzando il metodo compareTo definito nella classe Book.

Per ogni confronto, compareTo restituisce un valore numerico che determina l'ordine di due libri. In base a questi valori, l'algoritmo di ordinamento riorganizza gli elementi affinché siano ordinati per anno di pubblicazione crescente.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 8
some-alt