logo

ההבדל בין Comparable לבין Comparator

Comparable ו-Comparator שניהם ממשקים וניתן להשתמש בהם כדי למיין רכיבי אוסף.

עם זאת, ישנם הבדלים רבים בין ממשקי Comparable ו-Comparator המובאים להלן.

vlc להורדת סרטונים מיוטיוב
בר השוואהמשווה
1) דומה מספק א רצף מיון בודד . במילים אחרות, אנחנו יכולים למיין את האוסף על בסיס אלמנט בודד כמו מזהה, שם ומחיר.המשווה מספק רצפי מיון מרובים . במילים אחרות, אנו יכולים למיין את האוסף על בסיס מספר אלמנטים כמו מזהה, שם ומחיר וכו'.
2) בר השוואה משפיע על הכיתה המקורית , כלומר, המחלקה בפועל משתנה.משווה לא משפיע על המחלקה המקורית , כלומר, המחלקה בפועל לא משתנה.
3) מספקים דומים השיטה compareTo(). כדי למיין אלמנטים.Comparator מספק compare() שיטה כדי למיין אלמנטים.
4) ניתן להשוות ב java.lang חֲבִילָה.Comparator קיים ב- java.util חֲבִילָה.
5) נוכל למיין את רכיבי הרשימה מסוג Comparable לפי Collections.sort(List) שיטה.אנו יכולים למיין את רכיבי הרשימה מסוג Comparator לפי Collections.sort(List, Comparator) שיטה.

דוגמה להשוואה ב-Java

בוא נראה את הדוגמה של ממשק Comparable שממיין את רכיבי הרשימה על בסיס גיל.

קובץ: TestSort3.java

המרת סוג וליהוק ב-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); } } } 
בדוק את זה עכשיו

תְפוּקָה:

 105 Jai 21 101 Vijay 23 106 Ajay 27 

דוגמה ל-Java Comparator

בוא נראה דוגמה של ממשק Java Comparator שבו אנו ממיינים את האלמנטים של רשימה באמצעות השוואות שונות.

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

מחלקה זו מספקת היגיון השוואה המבוסס על השם. במקרה כזה, אנו משתמשים בשיטת compareTo() של המחלקה String, אשר מספקת באופן פנימי את לוגיקת ההשוואה.

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

במחלקה זו אנו מדפיסים את ערכי האובייקט על ידי מיון על בסיס שם וגיל.

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

תְפוּקָה:

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