Что такое интерфейс Comparable в Java и для чего он нужен?

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

Ответ

Интерфейс Comparable<T> используется для определения естественного порядка сортировки объектов класса. Класс, реализующий этот интерфейс, должен предоставить реализацию метода compareTo(), который сравнивает текущий объект (this) с другим объектом того же типа.

Для чего нужен:

  • Позволяет сортировать коллекции с помощью Collections.sort() или Arrays.sort() без явного указания компаратора.
  • Используется в коллекциях, которые хранят элементы в отсортированном порядке (например, TreeSet, TreeMap).

Пример реализации:

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    // Конструктор, геттеры/сеттеры...

    @Override
    public int compareTo(Person other) {
        // Сравниваем по возрасту (естественный порядок)
        return Integer.compare(this.age, other.age);
    }
}

// Использование:
List<Person> people = new ArrayList<>();
// ... добавление людей
Collections.sort(people); // Сортировка по возрасту, заданному в compareTo

Ключевой момент: Comparable определяет единственный, естественный способ сравнения объектов (например, по дате для LocalDate, по алфавиту для String).