logo

واجهة جافا المقارنة

واجهة جافا المقارنة يستخدم لترتيب كائنات فئة محددة من قبل المستخدم.

تم العثور على هذه الواجهة في حزمة java.util وتحتوي على طريقتين للمقارنة (Object obj1،Object obj2) والمساواة (Object element).

يوفر تسلسلات فرز متعددة، أي أنه يمكنك فرز العناصر على أساس أي عضو بيانات، على سبيل المثال، رولنو، الاسم، العمر أو أي شيء آخر.

طرق واجهة جافا المقارنة

طريقةوصف
مقارنة int العامة (Object obj1، Object obj2)يقارن الكائن الأول مع الكائن الثاني.
القيمة المنطقية العامة تساوي (Object obj)يتم استخدامه لمقارنة الكائن الحالي بالكائن المحدد.
القيمة المنطقية العامة تساوي (Object obj)يتم استخدامه لمقارنة الكائن الحالي بالكائن المحدد.

فئة المجموعات

المجموعات يوفر الفصل طرقًا ثابتة لفرز عناصر المجموعة. إذا كانت عناصر المجموعة من Set أو Map، فيمكننا استخدام TreeSet أو TreeMap. ومع ذلك، لا يمكننا فرز عناصر القائمة. توفر فئة Collections طرقًا لفرز عناصر عناصر نوع القائمة أيضًا.

طريقة فئة المجموعات لفرز عناصر القائمة

فرز الفراغ العام (قائمة القائمة، المقارنة ج): يستخدم لفرز عناصر القائمة حسب المقارنة المحددة.


مثال مقارنة Java (النمط القديم غير العام)

دعونا نرى مثال فرز عناصر القائمة على أساس العمر والاسم. في هذا المثال، قمنا بإنشاء 4 فئات جافا:

  1. Student.java
  2. AgeComparator.java
  3. NameComparator.java
  4. Simple.java
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

تحدد هذه الفئة منطق المقارنة بناءً على العمر. إذا كان عمر الكائن الأول أكبر من الثاني، فإننا نعيد قيمة موجبة. يمكن أن يكون أي شخص مثل 1، 2، 10. إذا كان عمر الكائن الأول أقل من الكائن الثاني، فإننا نعيد قيمة سالبة، يمكن أن تكون أي قيمة سالبة، وإذا كان عمر كلا الكائنين متساويًا، نحن نعود 0.

 import java.util.*; class AgeComparator implements Comparator{ public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } 
NameComparator.java

توفر هذه الفئة منطق المقارنة بناءً على الاسم. في مثل هذه الحالة، نستخدم طريقة CompareTo() لفئة السلسلة، والتي توفر منطق المقارنة داخليًا.

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

في هذا الفصل، نقوم بطباعة قيم الكائن عن طريق الفرز على أساس الاسم والعمر.

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); Iterator itr=al.iterator(); while(itr.hasNext()){ Student st=(Student)itr.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); Iterator itr2=al.iterator(); while(itr2.hasNext()){ Student st=(Student)itr2.next(); 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 

مثال مقارنة جافا (عام)

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() لفئة السلسلة، والتي توفر منطق المقارنة داخليًا.

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

في هذا الفصل، نقوم بطباعة قيم الكائن عن طريق الفرز على أساس الاسم والعمر.

 import java.util.*; import java.io.*; class Simple{ 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)); System.out.println('Sorting by Name'); Collections.sort(al,new NameComparator()); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } System.out.println('Sorting by age'); Collections.sort(al,new AgeComparator()); 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 

واجهة جافا 8 للمقارنة

واجهة Java 8 Comparator هي واجهة وظيفية تحتوي على طريقة مجردة واحدة فقط. الآن، يمكننا استخدام واجهة المقارنة كهدف تعيين لتعبير لامدا أو مرجع الأسلوب.

طرق واجهة المقارنة Java 8

طريقةوصف
مقارنة كثافة العمليات (T o1، T o2)يقارن الكائن الأول مع الكائن الثاني.
ثابتةمقارنة المقارنة (مستخرج مفتاح الوظيفة)فهو يقبل دالة تستخرج مفتاح فرز قابل للمقارنة من النوع T، وتقوم بإرجاع مقارن يتم مقارنته بواسطة مفتاح الفرز هذا.
مقارنة المقارنة الثابتة (Function keyExtractor، Comparator keyComparator)يقبل دالة تستخرج مفتاح الفرز من النوع T، وترجع مقارنة يتم مقارنتها بواسطة مفتاح الفرز هذا باستخدام المقارنة المحددة.
مقارنة ثابتة مقارنة مزدوجة (ToDoubleFunction keyExtractor)يقبل دالة تستخرج مفتاح فرز مزدوج من النوع T، وترجع مقارنًا يتم مقارنته بمفتاح الفرز هذا.
مقارنة ثابتة CompareInt (ToIntFunction keyExtractor)يقبل دالة تستخرج مفتاح فرز int من النوع T، وترجع مقارنًا يتم مقارنته بمفتاح الفرز هذا.
مقارنة ثابتة مقارنة طويلة (ToLongFunction keyExtractor)يقبل دالة تستخرج مفتاح فرز طويل من النوع T، وترجع مقارنًا يتم مقارنته بمفتاح الفرز هذا.
قيمة منطقية (كائن obj)يتم استخدامه لمقارنة الكائن الحالي بالكائن المحدد.
ثابتةالمقارنة NaturalOrder()تقوم بإرجاع مُقارن يقارن الكائنات القابلة للمقارنة بالترتيب الطبيعي.
المقارنة الثابتة nullsFirst(مقارنة المقارنة)تقوم بإرجاع مقارن يعامل العناصر الخالية على أنها أقل من العناصر غير الخالية.
المقارنة الثابتة nullsLast (مقارنة المقارنة)تقوم بإرجاع مقارن يعامل العناصر الخالية على أنها أكبر من العناصر غير الخالية.
تم عكس المقارنة الافتراضية ()تقوم بإرجاع المقارنة التي تحتوي على ترتيب عكسي للمقارنة المقدمة.
ثابتةمقارنة ترتيب عكسي ()تقوم بإرجاع المقارنة التي تحتوي على عكس الترتيب الطبيعي.
المقارنة الافتراضية ثم المقارنة (المقارنة الأخرى)تقوم بإرجاع مقارنة الترتيب المعجمي مع مقارنة أخرى.
تقصيرالمقارنة ثم المقارنة (مستخرج مفتاح الوظيفة)تقوم بإرجاع مقارنة ترتيب معجمي مع وظيفة تستخرج مفتاح فرز قابل للمقارنة.
المقارنة الافتراضية ثم المقارنة (Function keyExtractor، Comparator keyComparator)تقوم بإرجاع مقارنة ترتيب معجمي مع وظيفة تستخرج مفتاحًا لمقارنته مع المقارنة المحددة.
المقارنة الافتراضية ثمComparingDouble (ToDoubleFunction keyExtractor)تقوم بإرجاع مقارنة الترتيب المعجمي مع وظيفة تستخرج مفتاح الفرز المزدوج.
المقارنة الافتراضية ثمComparingInt (ToIntFunction keyExtractor)تقوم بإرجاع مقارنة الترتيب المعجمي مع وظيفة تستخرج مفتاح الفرز int.
المقارنة الافتراضية ثمComparingLong (ToLongFunction keyExtractor)تقوم بإرجاع مقارنة الترتيب المعجمي مع وظيفة تستخرج مفتاح فرز طويل.

جافا 8 مثال المقارنة

دعونا نرى مثال فرز عناصر القائمة على أساس العمر والاسم.

الملف: 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; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

الملف: TestSort1.java

 import java.util.*; public class TestSort1{ 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)); //Sorting elements on the basis of name Comparator cm1=Comparator.comparing(Student::getName); Collections.sort(al,cm1); System.out.println('Sorting by Name'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } //Sorting elements on the basis of age Comparator cm2=Comparator.comparing(Student::getAge); Collections.sort(al,cm2); System.out.println('Sorting by Age'); 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 

مثال على مقارنة Java 8: طريقة nullsFirst() وnullsLast()

هنا، نقوم بفرز قائمة العناصر التي تحتوي أيضًا على قيمة خالية.

الملف: 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; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

الملف: TestSort2.java

 import java.util.*; public class TestSort2{ 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,null,21)); Comparator cm1=Comparator.comparing(Student::getName,Comparator.nullsFirst(String::compareTo)); Collections.sort(al,cm1); System.out.println('Considers null to be less than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } Comparator cm2=Comparator.comparing(Student::getName,Comparator.nullsLast(String::compareTo)); Collections.sort(al,cm2); System.out.println('Considers null to be greater than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } 
 Considers null to be less than non-null 105 null 21 106 Ajay 27 101 Vijay 23 Considers null to be greater than non-null 106 Ajay 27 101 Vijay 23 105 null 21