الاختيار بين المقارنة والمقارنة

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

في جافا ، يتم تحديد هذه القواعد على مستوى الفئات التي تنتمي إليها الكائنات. على سبيل المثال ، لنأخذ فصلًا دراسيًا لوصف حساب المستخدم:

UserAccount {
  currency
  value
  updatedTimestamp
}

اعتمادًا على السياق ، يمكن مقارنة حسابات المستخدمين وفقًا لقواعد مختلفة ، على سبيل المثال:

  • في التطبيق ، يرى المستخدم الحسابات مرتبة حسب العملة ، ثم حسب القيمة ؛

  • في لوحة الإدارة ، يتم فرز جميع حسابات المستخدمين حسب تاريخ التعديل.

لتنفيذ مقارنة أكثر أو أقل في جافا ، هناك احتمالان:

  • يطبق UserAccount الواجهة Comparable<UserAccount>في هذه الحالة ، يحصل كائنان على إمكانية المقارنة مع بعضهما البعض:acc1.compareTo(acc2)

  • يتم إنشاء فئة منفصلة تقوم بتنفيذ الواجهة Comparator<UserAccount>، ومن ثم يمكن لكائن هذه الفئة مقارنة كائنين من الفئة الأصلية مع بعضهما البعض:userAccountComparator.compare(acc1, acc2)

من الواضح ، في بعض الحالات ، لا يوجد خيار بين المقارنة والمقارنة. إذا كان لا يمكن تعديل الفئة الأصلية ، أو إذا كانت هناك حاجة لقواعد مقارنة مختلفة ، فيجب استخدام المقارنة. خلاف ذلك ، يمكنك تقنيًا استخدام المقارنة والمقارنة.

Comparable , (class's natural ordering). , (String, Date). , . , . ( BigDecimal , 4.0 4.00?). , "" . Comparable.

. , . . : . :

  • : Arrays.sort(accountsList)

  • : Arrays.sort(accountsList, accountByValueComparator)

, compareTo UserAccount, - accountByValueComparator. . .

UserAccount implements Comparable<UserAccount> {
  @Override
  public int compareTo(UserAccount other) { .. }
}

, compareTo ? , Comparable#compareTo, Arrays.sort(). jdk, . : UserAccount Arrays.sort(), stream.sorted() .

في حالة تمرير المقارنة بشكل صريح ، فإن العثور على استخدامها أمر تافه. أنا أعتبر هذا حجة لاستخدام المقارنة. (Equals / hashCode هو مثال آخر على صعوبة العثور على الاستخدامات الضمنية ، ولكن لا يوجد بديل "Equalator" لها).

باختصار ، في معظم الحالات ، تفوق الحجج الخاصة باستخدام المقارنة الحجج الخاصة باستخدام المقارنة.




All Articles