هل يهم عدد صحيح موقّع عند تنفيذ المقارنة في فئة قابلة للمقارنة؟
-
26-09-2019 - |
سؤال
عند تنفيذ المقارنة () ، هل يجب أخذ درجة "الفرق" في الاعتبار؟
على سبيل المثال ، إذا كان لدي 3 كائنات ، C1 و C2 و C3 ، مثل C1 <C2 <C3.
هل يجب أن يعيد C1.compareto (C2) عددًا صحيحًا أقل من C2.compareto (C3)؟
لا يبدو أن الوثائق الخاصة بالواجهة المماثلة تحدد بطريقة أو بأخرى ، لذلك أعتقد أن الدرجة لا يهم ، ولكن سيكون من الجيد معرفة ما إذا كانت هناك بعض المزايا التي تُرجع رقمًا محددًا (على سبيل المثال ، التحسين سرعة فرز الأشجار أو شيء من هذا القبيل).
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/comparable.html#compareto(t)
المحلول
سؤال مثير للاهتمام ، ولكن مع ذلك لا ، حجم int
ليس له أهمية حسب Comparable<T>
و Comparator<T>
المواصفات ، فقط العلامة. من المتصور أن بعض خوارزمية الفرز يمكن أن تحدد بالإضافة إلى ذلك أنها يمكن أن تأخذ "تلميحات" من الحجم ، لكنني لست متأكدًا من مدى عملي للفرز القائم على المقارنة ، لأننا نحتاج حقًا إلى معرفة ما إذا a < b
, a == b
, ، أو a > b
(وهو حقًا ما Comparable
و Comparator
هي تجريدات OOP).
الآن يجب القول أنه قد يكون هناك نية خفية هنا لاستخدام تعبير الطرح لمقارنة القيم الرقمية ، أي شيء من هذا القبيل:
public int compare(T t1, T t2) {
return t1.intField - t2.intField;
}
لاحظ أن طريقة المقارنة هذه هي يحتمل مكسورة ، بسبب الفائض المحتمل عندما يكون الفرق بين الرقمين أكبر من Integer.MAX_VALUE
. في الواقع ، هذه واحدة من الألغاز المغطاة Java Puzzlers.
للتظاهر ، فكر في المقتطف التالي (مأخوذ من الكتاب):
int x = -2000000000;
int z = 2000000000;
System.out.println(x - z); // prints a positive number due to overflow
بوضوح x < z
, ، و بعد x - z
هو رقم إيجابي. احذر من استخدام هذا التعبير الطرح: من الأمان دائمًا إجراء مقارنة صريحة و return -1
, 0
, ، أو 1
في حين أن.
نصائح أخرى
لا ، الفرق الوحيد هو بين الأرقام السلبية ، 0 ، والأرقام الإيجابية. الدرجة غير ذات صلة.