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 )