logo

Diferència entre comparable i comparador

Comparable i Comparator són interfícies i es poden utilitzar per ordenar els elements de la col·lecció.

Tanmateix, hi ha moltes diferències entre les interfícies comparables i comparadores que es donen a continuació.

qiuck sort
ComparableComparador
1) El comparable proporciona a una única seqüència d'ordenació . En altres paraules, podem ordenar la col·lecció en funció d'un sol element com ara id, nom i preu.El comparador proporciona múltiples seqüències d'ordenació . En altres paraules, podem ordenar la col·lecció en funció de diversos elements com ara id, nom i preu, etc.
2) Comparable afecta la classe original , és a dir, es modifica la classe real.Comparador no afecta la classe original , és a dir, la classe real no es modifica.
3) Proporcions comparables mètode compareTo(). per ordenar elements.El comparador proporciona mètode compare(). per ordenar elements.
4) El comparable està present a java.lang paquet.Hi ha un comparador al java.util paquet.
5) Podem ordenar els elements de la llista de tipus Comparable per Collections.sort(Llista) mètode.Podem ordenar els elements de la llista de tipus Comparador per Collections.sort(Llista, Comparador) mètode.

Exemple comparable de Java

Vegem l'exemple d'una interfície comparable que ordena els elements de la llista en funció de l'edat.

Fitxer: 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); } } } 
Prova-ho ara

Sortida:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Exemple de comparador de Java

Vegem un exemple de la interfície Java Comparator on estem ordenant els elements d'una llista utilitzant diferents comparadors.

Student.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; } } 
NameComparator.java

Aquesta classe proporciona una lògica de comparació basada en el nom. En aquest cas, estem utilitzant el mètode compareTo() de la classe String, que proporciona internament la lògica de comparació.

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

En aquesta classe, estem imprimint els valors de l'objecte ordenant-los segons el nom i l'edat.

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

Sortida:

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