Что означают возвращаемые значения Comparable.compareTo в Java? - PullRequest
60 голосов
/ 22 сентября 2010

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

Ответы [ 6 ]

82 голосов
/ 22 сентября 2010

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

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

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

Разработчик должен обеспечить sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) для всех x и y. (Это означает, что x.compareTo (y) должен бросить исключение, если 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)). Вообще говоря, любой класс, который реализует сопоставимый интерфейс и нарушает это условие должно четко обозначить этот факт. рекомендуемый язык "Примечание: это класс имеет естественный порядок, который несовместимо с равными. "

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

Моя версия

Короче говоря:

this.compareTo(that)

возвращает

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

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

Примеры * +1048 * "abc".compareTo("def") даст что-то меньше 0, так как abc в алфавитном порядке перед def. Integer.valueOf(2).compareTo(Integer.valueOf(1)) даст что-то больше 0, потому что 2 больше 1. Некоторые дополнительные очки

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

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

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

44 голосов
/ 22 сентября 2010

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

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

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

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

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

22 голосов
/ 26 сентября 2016

Короткий ответ: (поиск вашей ситуации)

  • 1 .compareTo ( 0 ) ( возврат : 1 )
  • 1 .compareTo ( 1 ) ( возврат : 0 )
  • 0 .comapreTo ( 1 ) ( возврат : -1 )
5 голосов
/ 08 апреля 2013

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

  1. отрицательное значение int, если a если a == b
  2. Положительный int, если a> b
3 голосов
/ 22 сентября 2010

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

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

2 голосов
/ 17 ноября 2014
int x = thisObject.compareTo(anotherObject);

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

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