Зависит ли результат метода compare от порядка переданных объектов в Java?

«Зависит ли результат метода compare от порядка переданных объектов в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, результат метода 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() вместо написания новой логики сравнения.