У чому різниця між поверненням 0
, повертаючись 1
і повертаючись -1
в compareTo()
в Java?
a-b
якщо a
більше, результат позитивний (+1), інакше, якщо b
більше, результат негативний ... якщо вони дорівнює його0
У чому різниця між поверненням 0
, повертаючись 1
і повертаючись -1
в compareTo()
в Java?
a-b
якщо a
більше, результат позитивний (+1), інакше, якщо b
більше, результат негативний ... якщо вони дорівнює його0
Відповіді:
З довідкових документів 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)
повертається
де реалізація цього методу визначає фактичну семантику <
>
та ==
(я не маю ==
на увазі в сенсі оператора ідентифікації об'єкта Java)
"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
відповідно.
sgn()
, а не безпосередньо -1 та 1. Ви повинні додати це до своєї короткої версії.
Я використовую цю мнемоніку:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
Ви зберігаєте знаки і завжди порівнюєте результат з compareTo()
0
a.compareTo(b) = a - b
.
a-b
ніколи не слід використовувати в реалізації compaTo () у реальному коді, оскільки він може (і буде) переповнюватися.
Відповідь коротко: (пошук вашої ситуації)
Його можна використовувати для сортування, і 0 означає "рівний", тоді як -1, а 1 означає "менше" та "більше (більше)".
Будь-яке значення, яке повертається, менше ніж 0, означає, що лівий операнд менший, а якщо значення більше 0, то лівий операнд більший.
strcmp()
з C працює.
int x = thisObject.compareTo(anotherObject);
compareTo()
Метод повертає Int з наступними характеристиками:
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject
System.out.println (A.compareTo (B)> 0? "Так": "Ні")
якщо значення A> B, воно поверне "Так" або "Ні".