هل يهم عدد صحيح موقّع عند تنفيذ المقارنة في فئة قابلة للمقارنة؟

StackOverflow https://stackoverflow.com/questions/2633794

  •  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 ، والأرقام الإيجابية. الدرجة غير ذات صلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top