Comparable : Ordre Naturel des Données
En Java, il est courant de devoir trier des objets. Par exemple, dans une liste de livres, il peut être nécessaire de les trier par titre, auteur ou année de publication.
Pour gérer ces tâches, Java propose les interfaces Comparable et Comparator. Toutes deux permettent d’atteindre le même objectif (trier des objets), mais de manières différentes. Examinons-les séparément.
Qu'est-ce que Comparable ?
Par exemple, les chaînes de caractères Java sont triées alphabétiquement par défaut car la classe String implémente Comparable.
La méthode clé de l’interface fonctionnelle Comparable est :
int compareTo(T o);
Cette méthode retourne :
- Un nombre négatif si l’objet courant est inférieur à l’objet donné ;
- Zéro si les objets sont égaux ;
- Un nombre positif si l’objet courant est supérieur à l’objet donné.
Exemple : Tri des livres par année
Supposons que vous souhaitiez comparer des objets Book en fonction de leur année de publication.
Pour cela, la classe Book peut implémenter l'interface Comparable et redéfinir la méthode compareTo. En redéfinissant cette méthode, vous définissez la manière dont les objets Book doivent être comparés, ce qui influence directement le comportement de tri dans des méthodes telles que Collections.sort().
Cela permet de contrôler l'ordre dans lequel les livres sont triés—soit par ordre croissant ou décroissant—selon la logique implémentée dans compareTo.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344package 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 + ")"; } }
Lorsque Collections.sort(books) est appelé, Java parcourt la liste, en comparant les éléments à l'aide de la méthode compareTo définie dans la classe Book.
Pour chaque comparaison, compareTo retourne une valeur numérique qui détermine l'ordre de deux livres. En fonction de ces valeurs, l'algorithme de tri réorganise les éléments afin qu'ils soient classés par année de publication croissante.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 2.33
Comparable : Ordre Naturel des Données
Glissez pour afficher le menu
En Java, il est courant de devoir trier des objets. Par exemple, dans une liste de livres, il peut être nécessaire de les trier par titre, auteur ou année de publication.
Pour gérer ces tâches, Java propose les interfaces Comparable et Comparator. Toutes deux permettent d’atteindre le même objectif (trier des objets), mais de manières différentes. Examinons-les séparément.
Qu'est-ce que Comparable ?
Par exemple, les chaînes de caractères Java sont triées alphabétiquement par défaut car la classe String implémente Comparable.
La méthode clé de l’interface fonctionnelle Comparable est :
int compareTo(T o);
Cette méthode retourne :
- Un nombre négatif si l’objet courant est inférieur à l’objet donné ;
- Zéro si les objets sont égaux ;
- Un nombre positif si l’objet courant est supérieur à l’objet donné.
Exemple : Tri des livres par année
Supposons que vous souhaitiez comparer des objets Book en fonction de leur année de publication.
Pour cela, la classe Book peut implémenter l'interface Comparable et redéfinir la méthode compareTo. En redéfinissant cette méthode, vous définissez la manière dont les objets Book doivent être comparés, ce qui influence directement le comportement de tri dans des méthodes telles que Collections.sort().
Cela permet de contrôler l'ordre dans lequel les livres sont triés—soit par ordre croissant ou décroissant—selon la logique implémentée dans compareTo.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344package 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 + ")"; } }
Lorsque Collections.sort(books) est appelé, Java parcourt la liste, en comparant les éléments à l'aide de la méthode compareTo définie dans la classe Book.
Pour chaque comparaison, compareTo retourne une valeur numérique qui détermine l'ordre de deux livres. En fonction de ces valeurs, l'algorithme de tri réorganise les éléments afin qu'ils soient classés par année de publication croissante.
Merci pour vos commentaires !