logo

Diferența dintre comparabil și comparator

Comparabil și Comparator sunt ambele interfețe și pot fi folosite pentru a sorta elementele de colecție.

Cu toate acestea, există multe diferențe între interfețele Comparabil și Comparator care sunt prezentate mai jos.

ComparabilComparator
1) Comparabil prevede a o singură secvență de sortare . Cu alte cuvinte, putem sorta colecția pe baza unui singur element, cum ar fi id, nume și preț.Comparatorul oferă secvențe de sortare multiple . Cu alte cuvinte, putem sorta colecția pe baza mai multor elemente, cum ar fi id, nume și preț etc.
2) Comparabil afectează clasa inițială , adică clasa reală este modificată.Comparator nu afectează clasa inițială , adică clasa reală nu este modificată.
3) Furnizări comparabile metoda compareTo(). pentru a sorta elemente.Comparatorul oferă metoda compare(). pentru a sorta elemente.
4) Comparabil este prezent în java.lang pachet.Un Comparator este prezent în java.util pachet.
5) Putem sorta elementele listei de tip Comparabil după Collections.sort(Lista) metodă.Putem sorta elementele listei de tip Comparator după Collections.sort(Lista, Comparator) metodă.

Exemplu comparabil Java

Să vedem exemplul unei interfețe comparabile care sortează elementele listei în funcție de vârstă.

Fișier: 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); } } } 
Testează-l acum

Ieșire:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Exemplu de comparator Java

Să vedem un exemplu de interfață Java Comparator în care sortăm elementele unei liste folosind diferiți comparatori.

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

Această clasă oferă o logică de comparare bazată pe nume. În acest caz, folosim metoda compareTo() a clasei String, care furnizează intern logica de comparare.

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

În această clasă, imprimăm valorile obiectului prin sortare în funcție de nume și vârstă.

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

Ieșire:

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