Вопрос проверяет умение управлять сортировкой ключей в упорядоченных коллекциях.
Порядок сортировки в TreeMap можно задать через Comparable или Comparator. Comparable задает естественный порядок внутри класса ключа. Comparator передается в конструктор TreeMap. При наличии Comparator он имеет приоритет.
TreeMap позволяет гибко управлять тем, как будут упорядочены ключи.
Определение:Comparable задает естественный порядок объектов через метод compareTo().
Особенности:
порядок фиксирован в классе
нельзя изменить без изменения кода класса
class User implements Comparable<User> {
public int compareTo(User other) {
return this.id - other.id;
}
}
Определение:Comparator — внешний объект, описывающий логику сравнения.
Преимущества:
можно задать любой порядок
не требует изменения класса ключа
можно использовать разные сортировки
Comparator<Integer> desc = (a, b) -> b - a;
TreeMap<Integer, String> map = new TreeMap<>(desc);
Comparable — когда порядок естественный и всегда один
Comparator — когда требуется гибкость
Порядок сортировки в TreeMap задается либо через Comparable, либо через Comparator, причем Comparator имеет приоритет.