"В языке Java есть стандартное требование ..."
Стандартное требование к реализации метода compareTo ? Не ко всем же методам вообще...
-----
"... если поменять параметры метода compareTo местами, знак возвращаемого числа (но не обязательно его фактическое значение) также должен измениться на противоположный."
Чего это автор так прицепился к Comparable? Глава ведь не о возможностях сравнения объектов...
Вопрос: С помощью какой формулы можно убедиться в правильности реализации метода compareTo?
Ответ: sgn(x.compareTo(y)) = - sgn(y.compareTo(x)).
Стандартное требование к реализации метода compareTo ? Не ко всем же методам вообще...
-----
"... если поменять параметры метода compareTo местами, знак возвращаемого числа (но не обязательно его фактическое значение) также должен измениться на противоположный."
Чего это автор так прицепился к Comparable? Глава ведь не о возможностях сравнения объектов...
Вопрос: С помощью какой формулы можно убедиться в правильности реализации метода compareTo?
Ответ: sgn(x.compareTo(y)) = - sgn(y.compareTo(x)).
signum условия недостаточно для проверки корректности compareTo.
ОтветитьУдалитьНапример мне кажется что условие транзитивности отсюда не вытекает.
А почему оно должно отсюда вытекать?
ОтветитьУдалитьa=b, b=c -> a=c
a = sgn(x.compareTo(y))
b = -sqn(y.compareTo(x))
c = -sqn(z1.compareTo(z2))
b=c для всех случаев, когда соотношение z1 и z2 совпадает с соотношением y и x. И для всех этих случаев a=c.
Не вижу необходимости проверять транзитивность.