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.javaclass 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