Вопрос проверяет понимание механизмов сравнения объектов в Java.
Comparable задает естественный порядок объектов внутри самого класса. Comparator позволяет задавать порядок извне. Comparable реализуется один раз, а Comparator можно создавать в разных вариантах. Оба используются для сортировки коллекций.
Сортировка объектов в Java строится на двух базовых интерфейсах.
Определение:Comparable — интерфейс, который определяет естественный порядок объектов.
Характеристики:
метод compareTo()
логика сравнения встроена в класс
используется по умолчанию
class Product implements Comparable<Product> {
public int compareTo(Product other) {
return this.price - other.price;
}
}
Определение:Comparator — интерфейс для внешнего описания логики сравнения.
Характеристики:
метод compare()
не требует изменения класса
можно создавать несколько вариантов сортировки
Comparator<Product> byName =
(a, b) -> a.name.compareTo(b.name);
Перед сравнением важно отметить, что оба подхода решают разные задачи.
Comparable — один естественный порядок
Comparator — много возможных порядков
Comparator удобен для временной сортировки
Comparable задает базовый порядок объектов, а Comparator позволяет гибко управлять сортировкой без изменения класса.