Подтвердить что ты не робот

Что означают значения return Comparable.compareTo в Java?

В чем разница между возвратом 0, возвратом 1 и возвратом -1 в compareTo() в Java?

4b9b3361

Ответ 1

Официальное определение

Из справочных документов Comparable.compareTo(T):

Сравнивает этот объект с заданный объект для заказа. Возвращает отрицательное целое число, ноль или положительное целое число, поскольку этот объект меньше, чем, равный или больший, чем указанного объекта.

Разработчик должен обеспечить sgn (x.compareTo(y)) == -sgn (y.compareTo(x)) для всех x и y. (Это означает, что x.compareTo(y) должен исключить iff y.compareTo(x) выдает исключение.)

Разработчик должен также обеспечить, чтобы отношение транзитивно: (x.compareTo(y) > 0 & y.compareTo(z) > 0) подразумевает x.compareTo(z) > 0.

Наконец, разработчик должен обеспечить что x.compareTo(y) == 0 означает, что sgn (x.compareTo(z)) == sgn (y.compareTo(z)), для всех z.

Настоятельно рекомендуется, но не строго требуется, чтобы (x.compareTo(y) == 0) == (x.equals(y)). Вообще говоря, любой класс, который реализует интерфейс Comparable и нарушает это условие, следует ясно указывают на этот факт. Рекомендуемый язык: "Примечание: это класс имеет естественный порядок, который несовместимый с равными".

В приведенном выше описании обозначение sgn (выражение) обозначает математическая функция signum, который определен для возврата одного из -1, 0 или 1 в зависимости от того, является ли значение выражения отрицательное, ноль или положительны.

Моя версия

Короче:

this.compareTo(that)

возвращает

  • отрицательный int, если этот < что
  • 0, если это ==, что
  • положительный int, если это > что

где реализация этого метода определяет фактическую семантику < > и == (я не имею в виду == в смысле оператора идентификации Java-объекта)

Примеры

"abc".compareTo("def")

даст что-то меньшее, чем 0, поскольку abc находится в алфавитном порядке до def.

Integer.valueOf(2).compareTo(Integer.valueOf(1))

даст что-то большее, чем 0, потому что 2 больше 1.

Некоторые дополнительные точки

Примечание.. Хорошая практика для класса, реализующего Comparable для объявления семантики метода compareTo() в javadocs.

Примечание: следует прочитать хотя бы одно из следующих значений:

  • раздел Object Ordering в разделе Коллекция Trail в Sun Java Учебник
  • Эффективная Java по Джошуа Блох, особенно пункт 12: Рассмотрите возможность внедрения Comparable
  • Java Generics and Collections by Морис Нафталин, Филипп Вадлер, глава 3.1: Сопоставимые

Предупреждение: вы никогда не должны полагаться на возвращаемые значения compareTo -1, 0 и 1. Вы должны всегда тестировать x < 0, x == 0, x > 0 соответственно.

Ответ 2

Я использую эту мнемонику:

a.compareTo(b) < 0 // a < b

a.compareTo(b) > 0 // a > b

a.compareTo(b) == 0 // a == b

Вы сохраняете знаки и всегда сравниваете результат compareTo() с 0

Ответ 3

Ответьте кратко: (найдите свою ситуацию)

  • 1.compareTo(0) (возврат: 1)
  • 1.compareTo(1) (возврат: 0)
  • 0.comapreTo(1) (возврат: -1)

Ответ 4

возьмем пример, если мы хотим сравнить "a" и "b", т.е. ( "a" == this)

  • отрицательный int, если a < б
  • если a == b
  • Положительный int, если a > b

Ответ 5

Его можно использовать для сортировки, а 0 означает "равно" в то время как -1, а 1 означает "меньше" и "больше (больше)".

Любое возвращаемое значение, меньшее 0, означает, что левый операнд меньше, а если значение больше 0, то левый операнд больше.

Ответ 6

int x = thisObject.compareTo(anotherObject);

Метод compareTo() возвращает int со следующими характеристиками:

  • отрицательный If thisObject < anotherObject
  • ноль If thisObject == anotherObject
  • положительный If thisObject > anotherObject