Sobes.tech
Junior

Quelle est la différence entre Comparator et Comparable?

sobes.tech IA

Réponse de l'IA

Comparable est utilisé pour définir l'ordre "naturel" de tri pour un objet de classe. Il implémente l'interface Comparable<T>, fournissant la méthode compareTo(T o).

Comparator est utilisé pour définir un ou plusieurs ordres de tri alternatifs. Il implémente l'interface Comparator<T>, fournissant la méthode compare(T o1, T o2).

Les principales différences sont présentées dans le tableau :

Caractéristique Comparable Comparator
Interface java.lang.Comparable<T> java.util.Comparator<T>
Méthode de tri compareTo(T o) compare(T o1, T o2)
Utilisation Dans la classe de l'objet Classe séparée ou lambda
Localisation de la logique Dans la classe elle-même À un endroit séparé
Nombre d'ordres Un seul "naturel" Plusieurs alternatifs
Changement de classe Nécessite de modifier la classe Ne nécessite pas de modifier la classe

Exemple d'utilisation de Comparable :

// Classe implémentant Comparable pour trier par nom
class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(Person other) {
        // Comparaison par nom
        return this.name.compareTo(other.name);
    }

    @Override
    public String toString() {
        return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
    }
}

Exemple d'utilisation de Comparator :

// Comparator pour trier par âge
import java.util.Comparator;

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        // Comparaison par âge
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}