تخطَّ إلى المحتوى

Comparable

واجهة المقارنة الطبيعية Comparable

Comparable تُعرّف الترتيب الطبيعي لصنفك — compareTo تُرجع سالب/صفر/موجب.

Comparable واجهة تُنفذ لمقارنة كائنتين من نفس النوع. compareTo تُرجع عددًا: سالب إذا الأولى أقل، صفر إذا متساويتان، موجب إذا الثانية أقل. تُستخدم تلقائيًا مع Collections.sort وTreeSet/TreeMap.

الصياغة

class MyClass implements Comparable<MyClass> {
    @Override
    public int compareTo(MyClass other) {
        return this.value - other.value;
    }
}

📄 مثال

class Student implements Comparable<Student> {
    String name;
    double gpa;

    Student(String name, double gpa) {
        this.name = name;
        this.gpa = gpa;
    }

    @Override
    public int compareTo(Student other) {
        return Double.compare(this.gpa, other.gpa);
    }
}

List<Student> students = new ArrayList<>(List.of(
    new Student("سارة", 3.8),
    new Student("أحمد", 3.5)
));
Collections.sort(students); // ترتيب حسب GPA

أهم النقاط

العنصرالوظيفة
compareTo(T other)تُرجع سالب (أقل)، صفر (مساوي)، موجب (أكبر)
natural orderingالترتيب الطبيعي المستخدم مع TreeSet و Collections.sort

💡 نصائح عملية

  • استخدم Double.compare() أو Integer.compare() بدل الطرح المباشر — أكثر أمانًا
  • Comparabl لـ "الترتيب الطبيعي" (واحد فقط)، Comparator لترتيبات مخصصة (عدة)

⚠️ أخطاء شائعة

  • compareTo لا يراعي overflow: this.value - other.value خطأ مع أعداد كبيرة — استخدم compare()
  • عدم التطابق مع equals: compareTo == 0 لا يعني equals necessarily

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.