Comparable en français
Introduction au Comparable
En Java, l'interface Comparable joue un rôle crucial dans la définition de l'ordre dans lequel les instances d'une classe doivent être triées. Elle ne doit pas être confondue avec l'interface Comparator, qui est souvent utilisée dans une autre classe. L'interface Comparable est intégrée directement dans la classe que l'on souhaite trier.
Syntaxe de Comparable
Pour appliquer l'interface Comparable à une classe, on utilise le mot-clé implements. Voici un exemple de base :
class MonClasse implements Comparable {
// Corps de la classe
...
@Override
public int compareTo(MonClasse value) {
// Logique de comparaison
...
return result;
}
}
L'interface Comparable comprend une méthode unique : compareTo(). Cette méthode retourne une valeur entière qui détermine si l'instance actuelle (référencée par this) est logiquement inférieure, égale ou supérieure à une autre instance de la même classe.
Valeurs de retour de compareTo
La méthode compareTo retourne différentes valeurs selon le résultat de la comparaison :
| Valeur de retour | Signification | |------------------|---------------| | >= 1 | this instance > passed instance | | 0 | this instance = passed instance | | <= -1 | this instance < passed instance |
Cette méthode est utilisée par des fonctions comme Arrays.sort() et Collections.sort() pour réaliser le tri.
Exemple d'implémentation
Prenons l'exemple d'une classe Employé qui trie ses instances en fonction du nom de famille et ensuite du prénom.
import java.util.*;
// Employee.java
public class Employe implements Comparable {
String prenom;
String nomDeFamille;
// Le constructeur initialise le prénom et le nom
public Employe(String premier, String dernier) {
this.prenom = premier;
this.nomDeFamille = dernier;
}
// Méthode de sortie conviviale
public String toString() {
return "( " + nomDeFamille + ", " + prenom + " )";
}
// Implémentation de l'interface Comparable
@Override
public int compareTo(Employe value) {
if (this.nomDeFamille.compareTo(value.nomDeFamille) != 0) {
return this.nomDeFamille.compareTo(value.nomDeFamille);
} else {
return this.prenom.compareTo(value.prenom);
}
}
}
L'exemple ci-dessus montre comment l'interface Comparable est utilisée.
Tri d'objets Employé
Voici comment trier les objets de type Employé à l'aide de la méthode sort() intégrée :
import java.util.*;
// SortExample.java
public class ExempleDeTri {
public static void main(String[] args) {
// Configuration d'un tableau d'employés
Employe d[] = new Employe[5];
d[0] = new Employe("Kirk","Douglas");
d[1] = new Employe("Mel","Brooks");
d[2] = new Employe("Jane","Fonda");
d[3] = new Employe("Henry","Fonda");
d[4] = new Employe("Michael","Douglas");
// La méthode .sort() utilise l'interface Comparable
Arrays.sort(d);
// Affichage des employés triés
for (int i=0; i < d.length; i++) {
System.out.println(d[i]);
}
}
}
Dans ce cas, la sortie triée serait la suivante :
( Brooks, Mel )
( Douglas, Kirk )
( Douglas, Michael )
( Fonda, Henry )
( Fonda, Jane )