logo

Różnica między porównywalnym a porównawczym

Zarówno Comparable, jak i Comparator są interfejsami i można ich używać do sortowania elementów kolekcji.

Istnieje jednak wiele różnic między interfejsami porównywalnymi i komparatorami, które podano poniżej.

PorównywalnyKomparator
1) Porównywalne zapewnia pojedyncza sekwencja sortowania . Innymi słowy, możemy posortować kolekcję na podstawie pojedynczego elementu, takiego jak identyfikator, nazwa i cena.Komparator zapewnia wiele sekwencji sortowania . Innymi słowy, możemy posortować kolekcję na podstawie wielu elementów, takich jak identyfikator, nazwa i cena itp.
2) Porównywalne wpływa na oryginalną klasę , tj. rzeczywista klasa jest modyfikowana.Komparator nie ma wpływu na oryginalną klasę , tj. rzeczywista klasa nie jest modyfikowana.
3) Porównywalne oferty metoda CompareTo(). do sortowania elementów.Komparator zapewnia metoda porównania(). do sortowania elementów.
4) Porównywalne występuje w java.lang pakiet.Komparator jest obecny w Java.util pakiet.
5) Możemy sortować elementy listy typu Porównywalne według Kolekcje.sort(Lista) metoda.Elementy listy typu Komparator możemy sortować według Kolekcje.sort(Lista, Porównanie) metoda.

Porównywalny przykład Java

Zobaczmy przykład interfejsu Comparable, który sortuje elementy listy na podstawie wieku.

Plik: 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); } } } 
Przetestuj teraz

Wyjście:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Przykład komparatora Java

Zobaczmy przykład interfejsu Java Comparator, w którym sortujemy elementy listy za pomocą różnych komparatorów.

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

Ta klasa zapewnia logikę porównawczą opartą na nazwie. W takim przypadku korzystamy z metody CompareTo() klasy String, która wewnętrznie udostępnia logikę porównania.

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

W tej klasie drukujemy wartości obiektu sortując po nazwie i wieku.

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

Wyjście:

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