Ответ
Да, результат метода compare напрямую зависит от порядка аргументов.
Comparable.compareTo(T o)иComparator.compare(T a, T b)следуют контракту:- Возвращают отрицательное число, если первый аргумент меньше второго (
a < b). - Возвращают ноль, если аргументы равны (
a == b). - Возвращают положительное число, если первый аргумент больше второго (
a > b).
- Возвращают отрицательное число, если первый аргумент меньше второго (
Почему это важно? Потому что порядок определяет направление сортировки и результаты сравнения в алгоритмах.
Пример с Comparable<Integer>:
Integer five = 5;
Integer ten = 10;
System.out.println(five.compareTo(ten)); // Вывод: -1 (5 < 10)
System.out.println(ten.compareTo(five)); // Вывод: 1 (10 > 5)
Пример с Comparator<Integer>:
Comparator<Integer> naturalOrder = Integer::compare;
System.out.println(naturalOrder.compare(five, ten)); // -1
System.out.println(naturalOrder.compare(ten, five)); // 1
Практическое следствие: Чтобы изменить порядок сортировки (например, на убывающий), часто используют Comparator.reversed() вместо написания новой логики сравнения.