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()
فيه.
// Comparator هنا قمنا باستدعاء الإنترفيس import java.util.Comparator; // Integer و حددنا أنه سيتعامل مع كائنات نوعها implements هنا فعلنا له public class IntegersComparator implements Comparator<Integer> { // لنحدد ماذا ستفعل عند استدعائها compare() للدالة 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; } } }
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