logo

Karşılaştırılabilir ve Karşılaştırıcı Arasındaki Fark

Karşılaştırılabilir ve Karşılaştırıcının her ikisi de arayüzlerdir ve koleksiyon öğelerini sıralamak için kullanılabilir.

Ancak Comparable ve Comparator arayüzleri arasında aşağıda verilen birçok fark vardır.

mamta kulkarni
KarşılaştırılabilirKarşılaştırıcı
1) Karşılaştırılabilirlik şunları sağlar: tek sıralama sırası . Yani koleksiyonu id, name, fiyat gibi tek bir unsura göre sıralayabiliriz.Karşılaştırıcı şunları sağlar: çoklu sıralama dizileri . Yani koleksiyonu id, isim, fiyat gibi birden fazla unsura göre sıralayabiliyoruz.
2) Karşılaştırılabilir orijinal sınıfı etkiler , yani gerçek sınıf değiştirilir.Karşılaştırıcı orijinal sınıfı etkilemez , yani gerçek sınıf değiştirilmez.
3) Karşılaştırılabilirlik sağlar CompareTo() yöntemi öğeleri sıralamak için.Karşılaştırıcı şunları sağlar karşılaştırma() yöntemi öğeleri sıralamak için.
4) Karşılaştırılabilirlik şuralarda mevcut: java.lang paket.Bir Karşılaştırıcı mevcut java.util paket.
5) Karşılaştırılabilir türün liste öğelerini şuna göre sıralayabiliriz: Koleksiyonlar.sort(Liste) yöntem.Karşılaştırıcı tipinin liste elemanlarını şuna göre sıralayabiliriz: Collections.sort(Liste, Karşılaştırıcı) yöntem.

Java Karşılaştırılabilir Örneği

Liste öğelerini yaşa göre sıralayan Karşılaştırılabilir arayüz örneğini görelim.

Dosya: 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); } } } 
Şimdi Test Edin

Çıktı:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

Java Karşılaştırıcı Örneği

Farklı karşılaştırıcılar kullanarak bir listenin öğelerini sıraladığımız Java Karşılaştırıcı arayüzünün bir örneğini görelim.

tarihi dizeye dönüştür
Öğrenci.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

Bu sınıf isme dayalı karşılaştırma mantığı sağlar. Böyle bir durumda, dahili olarak karşılaştırma mantığını sağlayan String sınıfının CompareTo() yöntemini kullanıyoruz.

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

Bu sınıfta nesnenin değerlerini isim ve yaş bazında sıralayarak yazdırıyoruz.

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

Çıktı:

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