Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

Javaالإنترفيس Comparator في جافا

  • مقدمة
  • دوال الإنترفيس Comparator
  • مثال شامل

مقدمة

الإنترفيس Comparator مصمم لمقارنة قيم الكائنات.

يعتمد عليه كل إنترفيس يقوم بترتيب الكائنات التي يتم إدخلها فيه, سواء كان ترتيباً حسب القيمة أو ترتيباً أبجدياً.
فمثلاً، عند إنشاء كائن من الكلاس TreeSet نجد العناصر فيه تم ترتيبها بشكل تصاعدي حسب قيمهم في حال كانت عناصره عبارة عن أرقام، أو ترتيباً أبجدياً في حال كانت عناصره تمثل نصوص.

دوال الإنترفيس Comparator

الجدول التالي يحتوي على دوال الإنترفيس Comparator.

الدالة مع تعريفها
1 public int compare(Object obj1, Object obj2) تقارن الكائن obj1 و الكائن obj2 من أجل ترتيبهم.
يجب أن تفعل لها Override لتحدد كيف تريدها أن تقارن الكائنين, أي على أي أساس سيتم ترتيبهم.
فمثلاً يمكنك جعلها تقارن عدد أحرف الكائنين في حال كانوا عبارة عن نصوص, و يمكنك جعلها تقارن قيمة الكائنين في حال كانوا عبارة عن أرقام.
2 public boolean equals(Object obj) ترجع true في حال كان الكائن الموضوع فيها كـ Argument يساوي الكائن الذي قام باستدعائها.

مثال شامل

في المثال التالي قمنا بإنشاء كلاس إسمه NumbersComparator يفعل implements للإنترفيس Comparator.
إذاً على الكلاس NumbersComparator أن يفعل Override للدالة compare() حتى تقارن الأرقام بالطريقة التي نريد.

الدالة compare() عندها باراميترين من النوع Object. يجب جعلها تقارن أي كائنين نمررهما لها بالطريقة التي نريد.

سنجعلها تقارن أي رقمين كالتالي:

  • ترجع 0 في حال كانا متساوييان.
  • ترجع 1 في حال كانت قيمة الكائن num1 أكبر من قيمة الكائن num2.
  • ترجع -1 في حال كانت قيمة الكائن num1 أصغر من قيمة الكائن num2.

في الأخير قمنا بإنشاء كلاس إسمه Main لتجربة الدالة compare() فيه.


IntegersComparator.java
// Comparator هنا قمنا باستدعاء الإنترفيس
import java.util.Comparator;
// Integer و حددنا أنه سيتعامل مع كائنات نوعها implements هنا فعلنا له
public class IntegersComparator implements Comparator<Integer> {
// لنحدد ماذا ستفعل عند استدعائها compare() للدالة Override هنا فعلنا
@Override
public int compare(Integer num1, Integer num2) {
// سيتم إرجاع القيمة 0 num2 أو الكائن num1 مكان الكائن null إذا تم إدخال
if( num1 == null || num2 == null ) {
return 0;
}
// سترجع 0 إلى مكان الإستدعاء num2 تساوي قيمة num1 في حال كانت قيمة
if( num1 == num2 ) {
return 0;
}
// سترجع 1 إلى مكان الإستدعاء num2 أكبر من قيمة num1 في حال كانت قيمة
else if( num1 > num2 ) {
return 1;
}
// -1 هي الأكبر و عندها سيتم إرجاع num2 الإحتمال الأخير أن تكون قيمة
else {
return -1;
}
}
}
// Comparator هنا قمنا باستدعاء الإنترفيس import java.util.Comparator; // Integer و حددنا أنه سيتعامل مع كائنات نوعها implements هنا فعلنا له public class IntegersComparator implements Comparator<Integer> { // لنحدد ماذا ستفعل عند استدعائها compare() للدالة Override هنا فعلنا @Override public int compare(Integer num1, Integer num2) { // سيتم إرجاع القيمة 0 num2 أو الكائن num1 مكان الكائن null إذا تم إدخال if( num1 == null || num2 == null ) { return 0; } // سترجع 0 إلى مكان الإستدعاء num2 تساوي قيمة num1 في حال كانت قيمة if( num1 == num2 ) { return 0; } // سترجع 1 إلى مكان الإستدعاء num2 أكبر من قيمة num1 في حال كانت قيمة else if( num1 > num2 ) { return 1; } // -1 هي الأكبر و عندها سيتم إرجاع num2 الإحتمال الأخير أن تكون قيمة else { return -1; } } }

Main.java
public class Main {
public static void main(String[] args) {
// منه compare() حتى نستطيع استخدام الدالة IntegersComparator هنا قمنا بإنشاء كائن من الكلاس
IntegersComparator ic = new IntegersComparator();
// هنا قمنا بمقارنة عددين مع بعضها في كل مرة مع عرض نتيجة المقارنة
System.out.println( ic.compare(20, 10) );
System.out.println( ic.compare(10, 20) );
System.out.println( ic.compare(20, 20) );
}
}
public class Main { public static void main(String[] args) { // منه compare() حتى نستطيع استخدام الدالة IntegersComparator هنا قمنا بإنشاء كائن من الكلاس IntegersComparator ic = new IntegersComparator(); // هنا قمنا بمقارنة عددين مع بعضها في كل مرة مع عرض نتيجة المقارنة System.out.println( ic.compare(20, 10) ); System.out.println( ic.compare(10, 20) ); System.out.println( ic.compare(20, 20) ); } }

سنحصل على النتيجة التالية عند التشغيل.

1
-1
0
0
0
1 -1 0 0 0