Определенное целое число со знаком имеет значение при реализации compareTo в Сопоставимом <Тип> класс?

При реализации compareTo (), должна быть принята во внимание степень "различия"?

Например, если у меня есть 3 объекта, C1, C2 и C3, такой что C1

C1.compareTo(C2) должен возвратить целое число, которое является меньше, чем C2.compareTo(C3)?

Документация для интерфейса Comparable, кажется, не указывает так или иначе, таким образом, я предполагаю, что градус не имеет значения, но было бы хорошо знать, существует ли некоторое преимущество, возвращая определенное число (например, улучшая скорость вида TreeSet или что-то).

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo (T)

8
задан javanix 13 April 2010 в 23:05
поделиться

2 ответа

Интересный вопрос, но тем не менее нет, величина int не имеет значения согласно спецификациям Comparable и Comparator , только знак. Возможно, какой-то алгоритм сортировки может дополнительно указать, что они могут брать «подсказки» по величине, но я не уверен, насколько это практично для сортировки на основе сравнения, поскольку нам действительно нужно только знать, если a , 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 , и все же x - z является положительным числом. Остерегайтесь использования этой идиомы вычитания: всегда гораздо безопаснее выполнить явное сравнение и вместо этого вернуть -1 , 0 или 1 .

4
ответ дан 5 December 2019 в 22:17
поделиться

нет, единственная разница между отрицательными числами, 0 и положительными числами. степень не имеет значения.

2
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: