Comparable مقابل Comparator
تعلّم الفرق بين Comparable وComparator للفرز المخصّص. تدرّب على compareTo وComparators خارجية.
Comparable مقابل Comparator درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 3 دروس في المجموع.
مقدمة
يحتاج الفرز إلى قواعد. يوفّر كل من Comparable وComparator طريقة لتعريف هذه القواعد:
- Comparable: تطبّق الفئة compareTo.
- Comparator: كائن منفصل يُمرّر إلى sort().
مفهوم Comparable
يتيح Comparable للفئة تعريف ترتيبها الطبيعي. طبّقوا compareTo لكي تعرف Collections.sort كيفية ترتيب العناصر.
الشفرة: Comparable
تطبّق Person هنا Comparable وتفرز العناصر حسب العمر. وهذا يحدد ترتيبها الطبيعي.
public class Main {
static class Person implements Comparable<Person> {
String name;
int age;
Person(String n, int a) { name = n; age = a; }
public int compareTo(Person o) {
return this.age - o.age; // order by age
}
public String toString() { return name + "(" + age + ")"; }
}
public static void main(String[] args) {
java.util.List<Person> list = new java.util.ArrayList<>();
list.add(new Person("Ada",30));
list.add(new Person("Bob",25));
java.util.Collections.sort(list);
System.out.println(list); // [Bob(25), Ada(30)]
}
}
مفهوم Comparator
يكون Comparator خارجيًا. ويمكنه فرز الفئة نفسها بطرق مختلفة، مثل الفرز حسب الاسم بدلًا من العمر.
الشفرة: Comparator
يفرز هذا Comparator العناصر حسب name. ويمكن إعادة استخدام Comparators مختلفة مع الفئة نفسها.
public class Main {
static class Person {
String name; int age;
Person(String n,int a){ name=n; age=a; }
public String toString(){ return name+"("+age+")"; }
}
public static void main(String[] args) {
java.util.List<Person> list = new java.util.ArrayList<>();
list.add(new Person("Ada",30));
list.add(new Person("Bob",25));
java.util.Comparator<Person> byName = (p1,p2) -> p1.name.compareTo(p2.name);
java.util.Collections.sort(list, byName);
System.out.println(list); // [Ada(30), Bob(25)]
}
}
الشفرة: Comparator عكسي
يمكن لـ Comparators تعريف أي قاعدة، مثل الترتيب التنازلي المستخدم هنا.
public class Main {
public static void main(String[] args) {
java.util.List<Integer> nums = new java.util.ArrayList<>();
nums.add(5); nums.add(1); nums.add(3);
java.util.Comparator<Integer> desc = (a,b) -> b - a;
java.util.Collections.sort(nums, desc);
System.out.println(nums); // [5,3,1]
}
}
تحقق من Comparable وComparator
تحقق سريع: ما الفرق الرئيسي بين Comparable وComparator؟
مراجعة
مراجعة: يعرّف Comparable الترتيب الطبيعي داخل الفئة، بينما يكون Comparator منفصلًا ويمكنه إنشاء استراتيجيات فرز متعددة.
الأسئلة الشائعة
هل درس «Comparable مقابل Comparator» مجاني؟
نعم — نص درس «Comparable مقابل Comparator» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 3 دروس في المجموع.
ماذا ستتعلم في «Comparable مقابل Comparator»؟
تعلّم الفرق بين Comparable وComparator للفرز المخصّص. تدرّب على compareTo وComparators خارجية. تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «Comparable مقابل Comparator»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Maps وحساب التكرارات
- Comparable مقابل Comparator
- الفرز والبحث باستخدام Collections