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

مقدمة

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

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

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

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

الدالة مع تعريفها
public int compare(Object obj1, Object obj2) تقارن الكائن obj1 و الكائن obj2 من أجل ترتيبهم.
يجب أن تفعل لها Override لتحدد كيف تريدها أن تقارن الكائنين, أي على أي أساس سيتم ترتيبهم.
فمثلاً يمكنك جعلها تقارن عدد أحرف الكائنين في حال كانوا عبارة عن نصوص, و يمكنك جعلها تقارن قيمة الكائنين في حال كانوا عبارة عن أرقام.
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;
        }

    }
    
}
		

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

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

1
-1
0
0
0
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة