Ответ
Интерфейс Comparable<T> определяет естественный порядок сортировки объектов класса. Класс, реализующий этот интерфейс, обязуется предоставить реализацию метода compareTo(T o), который сравнивает текущий объект (this) с заданным.
Сигнатура и контракт метода int compareTo(T o):
- Возвращает отрицательное целое число, если
this < o. - Возвращает ноль, если
this == o. - Возвращает положительное целое число, если
this > o.
Пример: Сортировка объектов Person по возрасту
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
// Сравниваем по полю age (естественный порядок)
return Integer.compare(this.age, other.age);
}
// Геттеры, toString() и т.д.
}
// Использование
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25)
);
Collections.sort(people); // Сортировка по age: Bob (25), Alice (30)
Где применяется?
Методы, использующие Comparable:
Collections.sort(list)/Arrays.sort(array)Collections.binarySearch(...)- Автоматическая сортировка в
TreeSet<T>иTreeMap<K, V>.
Важно: Реализация compareTo() должна быть согласована с equals() (т.е., a.compareTo(b) == 0 должен возвращать true тогда же, когда и a.equals(b)). Это критично для корректной работы с коллекциями, основанными на сравнении.