logo

Forskellen mellem sammenlignelig og komparator

Comparable og Comparator er begge grænseflader og kan bruges til at sortere samlingselementer.

ssh fuld formular

Der er dog mange forskelle mellem sammenlignelige og komparatorgrænseflader, der er angivet nedenfor.

SammenligneligKomparator
1) Sammenlignelig giver en enkelt sorteringssekvens . Med andre ord kan vi sortere samlingen ud fra et enkelt element som id, navn og pris.Komparatoren giver flere sorteringssekvenser . Med andre ord kan vi sortere samlingen på basis af flere elementer såsom id, navn og pris osv.
2) Sammenlignelig påvirker den oprindelige klasse , dvs. den faktiske klasse er ændret.Komparator påvirker ikke den oprindelige klasse , dvs. den faktiske klasse ændres ikke.
3) Sammenlignelige giver compareTo() metode at sortere elementer.Komparator giver sammenligne() metode at sortere elementer.
4) Sammenlignelig er til stede i java.lang pakke.En komparator er til stede i java.util pakke.
5) Vi kan sortere listeelementerne af sammenlignelig type efter Collections.sort(List) metode.Vi kan sortere listeelementerne af Comparator type efter Collections.sort(List, Comparator) metode.

Java sammenligneligt eksempel

Lad os se eksemplet med en sammenlignelig grænseflade, der sorterer listeelementerne på basis af alder.

Fil: 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); } } } 
Test det nu

Produktion:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Eksempel på Java-komparator

Lad os se et eksempel på Java Comparator-grænsefladen, hvor vi sorterer elementerne i en liste ved hjælp af forskellige komparatorer.

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

Denne klasse giver sammenligningslogik baseret på navnet. I sådanne tilfælde bruger vi compareTo()-metoden i String-klassen, som internt leverer sammenligningslogikken.

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

I denne klasse udskriver vi objektets værdier ved at sortere efter navn og alder.

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

Produktion:

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