Ответ
Интерфейс Comparable<T> следует реализовывать в классе, когда для его объектов существует естественный (логический) порядок сортировки по умолчанию.
Когда использовать:
- Класс имеет одно очевидное и наиболее часто используемое правило сравнения (например,
Integer— по числовому значению,String— лексикографически). - Вы хотите, чтобы методы сортировки (например,
Collections.sort(list)) работали с вашими объектами "из коробки" без передачи дополнительногоComparator. - Вы планируете хранить объекты в коллекциях, которые автоматически сортируются (
TreeSet,TreeMap).
Пример реализации для сортировки по возрасту:
class Person implements Comparable<Person> {
private String name;
private int age;
// Конструктор, геттеры, сеттеры...
@Override
public int compareTo(Person other) {
// Сравниваем по полю age (естественный порядок для этого класса)
return Integer.compare(this.age, other.age);
// Предпочтительнее использовать Integer.compare() для избежания переполнения
}
}
// Использование:
List<Person> people = new ArrayList<>();
// ... добавление людей
Collections.sort(people); // Сортировка использует compareTo
Важно: Метод compareTo должен быть согласован с equals (хотя это не строгое требование компилятора). Если нужны разные способы сортировки, используйте Comparator. Comparable определяет один основной порядок.