Интересный вопрос, но, тем не менее, величина int
не имеет значения согласно спецификациям Comparable<T>
и Comparator<T>
, только знак.Возможно, какой-то алгоритм сортировки может дополнительно указывать, что они могут принимать «подсказки» от величины, но я не уверен, насколько это целесообразно для сортировки на основе сравнения, поскольку нам действительно нужно только знать, если a < b
, a == b
или a > b
(что на самом деле Comparable
и Comparator
являются абстракциями ООП).
Теперь необходимо сказать, что здесь может быть скрытое намерение использовать вычитаниеидиома для сравнения числовых значений, т.е. что-то вроде этого:
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
.