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());
}
}