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 الكامل بالعربي.