logo

Différence entre comparable et comparateur

Comparable et Comparator sont tous deux des interfaces et peuvent être utilisés pour trier les éléments de collection.

Cependant, il existe de nombreuses différences entre les interfaces Comparable et Comparator, indiquées ci-dessous.

ComparableComparateur
1) Comparable fournit un séquence de tri unique . En d’autres termes, nous pouvons trier la collection sur la base d’un seul élément tel que l’identifiant, le nom et le prix.Le comparateur fournit plusieurs séquences de tri . En d’autres termes, nous pouvons trier la collection sur la base de plusieurs éléments tels que l’identifiant, le nom et le prix, etc.
2) Comparable affecte la classe d'origine , c'est-à-dire que la classe réelle est modifiée.Comparateur n'affecte pas la classe d'origine , c'est-à-dire que la classe réelle n'est pas modifiée.
3) Offres comparables Méthode compareTo() pour trier les éléments.Le comparateur fournit méthode comparer() pour trier les éléments.
4) Comparable est présent dans java.lang emballer.Un Comparateur est présent dans le java.util emballer.
5) Nous pouvons trier les éléments de la liste de type Comparable par Collections.sort(Liste) méthode.Nous pouvons trier les éléments de la liste de type Comparator par Collections.sort (Liste, Comparateur) méthode.

Exemple comparable à Java

Voyons l'exemple d'une interface Comparable qui trie les éléments de la liste en fonction de l'âge.

Fichier : TestSort3.java

 //Java Program to demonstrate the use of Java Comparable. //Creating a class which implements Comparable Interface import java.util.*; import java.io.*; class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } } //Creating a test class to sort the elements public class TestSort3{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 
Testez-le maintenant

Sortir:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Exemple de comparateur Java

Voyons un exemple de l'interface Java Comparator où nous trions les éléments d'une liste à l'aide de différents comparateurs.

Étudiant.java
 class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } 
AgeComparator.java
 import java.util.*; class AgeComparator implements Comparator{ public int compare(Student s1,Student s2){ if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
NomComparator.java

Cette classe fournit une logique de comparaison basée sur le nom. Dans ce cas, nous utilisons la méthode compareTo() de la classe String, qui fournit en interne la logique de comparaison.

 import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } 
TestComparator.java

Dans cette classe, nous imprimons les valeurs de l'objet en triant sur la base du nom et de l'âge.

 //Java Program to demonstrate the use of Java Comparator import java.util.*; import java.io.*; class TestComparator{ public static void main(String args[]){ //Creating a list of students ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); System.out.println('Sorting by Name'); //Using NameComparator to sort the elements Collections.sort(al,new NameComparator()); //Traversing the elements of list for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('sorting by Age'); //Using AgeComparator to sort the elements Collections.sort(al,new AgeComparator()); //Travering the list again for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 

Sortir:

 Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27