Verschil tussen vergelijkbaar en comparator
Comparable en Comparator zijn beide interfaces en kunnen worden gebruikt om collectie-elementen te sorteren.
Er zijn echter veel verschillen tussen Comparable- en Comparator-interfaces, die hieronder worden weergegeven.
| Vergelijkbaar | Comparator |
|---|---|
| 1) Vergelijkbaar biedt a enkele sorteervolgorde . Met andere woorden: we kunnen de collectie sorteren op basis van één element, zoals id, naam en prijs. | De vergelijker biedt meerdere sorteervolgordes . Met andere woorden, we kunnen de collectie sorteren op basis van meerdere elementen, zoals ID, naam en prijs enz. |
| 2) Vergelijkbaar beïnvloedt de oorspronkelijke klasse , dat wil zeggen dat de feitelijke klasse wordt gewijzigd. | Comparator heeft geen invloed op de oorspronkelijke klasse , dat wil zeggen dat de feitelijke klasse niet wordt gewijzigd. |
| 3) Vergelijkbare aanbiedingen vergelijkTo() methode om elementen te sorteren. | Vergelijker biedt vergelijk() methode om elementen te sorteren. |
| 4) Vergelijkbaar is aanwezig in java.lang pakket. | Er is een vergelijker aanwezig in de java.util pakket. |
| 5) We kunnen de lijstelementen van het vergelijkbare type sorteren op Collecties.sort(Lijst) methode. | We kunnen de lijstelementen van het type Comparator sorteren op Collections.sort(Lijst, Vergelijker) methode. |
Vergelijkbaar Java-voorbeeld
Laten we het voorbeeld bekijken van een vergelijkbare interface die de lijstelementen sorteert op basis van leeftijd.
Bestand: 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 het nu Uitgang:
105 Jai 21 101 Vijay 23 106 Ajay 27
Java-vergelijkingsvoorbeeld
Laten we een voorbeeld bekijken van de Java Comparator-interface waarin we de elementen van een lijst sorteren met behulp van verschillende comparatoren.
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; } } NaamComparator.java Deze klasse biedt vergelijkingslogica op basis van de naam. In dat geval gebruiken we de methode CompareTo() van de klasse String, die intern de vergelijkingslogica levert.
import java.util.*; class NameComparator implements Comparator{ public int compare(Student s1,Student s2){ return s1.name.compareTo(s2.name); } } TestComparator.java In deze klasse drukken we de waarden van het object af door te sorteren op basis van naam en leeftijd.
//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); } } } Uitgang:
Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27