Документация TreeMap
содержит следующую информацию:
Реализация {@link NavigableMap} на основе красно-черного дерева. Карта сортируется в соответствии с {@linkplain Comparable естественным порядком} ее ключей или {@link Comparator}, предоставляемым во время создания карты, в зависимости от того, какой конструктор используется.
два конструктора TreeMap
(их больше, но применяется одно и то же правило) также применяются к этому указанному правилу c. Первый предполагает, что ключ обычно Comparable
(и каждый вставленный ключ должен это делать), а второй предоставляет возможность предоставить пользовательский Comparator
.
public TreeMap() {
comparator = null;
}
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
Определение, какое поведение Если используется, реализация часто проверяется, если Comparator
был инициализирован.
final int compare(Object k1, Object k2) {
return comparator == null ? ((Comparable<? super K>)k1).compareTo((K)k2)
: comparator.compare((K)k1, (K)k2);
}
Таким образом, ваше следующее предположение неприменимо:
Поскольку ключ уже реализует Comparable и с переопределением compare ().
Ключ K
из Map
может быть любого типа и не ограничивается Comparable
. Это обеспечивает большую гибкость, поскольку иногда вы не можете сделать класс взаимно сопоставимым (например, если он поступает из сторонней библиотеки), или класс логически не имеет естественного порядка. Я бы рекомендовал прочитать документацию как Comparable
и Comparator
.