В чем разница между возвратом 0
, возвратом 1
и возвратом -1
в compareTo()
в Java?
Что означают значения return Comparable.compareTo в Java?
Ответ 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