2016-02-17 3 views
1

Вот заголовок реализации Java TreeMap (1.8_071):Почему Java позволяет ключи TreeMap и значения TreeSet не сопоставимы?

public class TreeMap<K,V> 
    extends AbstractMap<K,V> 
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable 

Почему нет никаких ограничений, как это:

public class TreeMap<K extends Comparable<?>,V> 
     extends AbstractMap<K,V> 
     implements NavigableMap<K,V>, Cloneable, java.io.Serializable 

ответ

7

Потому что, как говорит доктор, вы можете использовать ключ, который не является сравнимый и обеспечивает Компаратор объект:

TreeMap(Comparator<? super K> comparator) 
Constructs a new, empty tree map, ordered according to the given comparator. 

(https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html)

1

TreeMap сортирует на основе естественного упорядочения ключей согласно документации, то есть использует методы compareTo, определенные на ключах. Если никакого сравнения не найдено, я думаю, что это не будет беспокоить сортировку, если вы не предоставите класс компаратора при построении TreeMap.

Преимущество этого в том, что вам не нужно поставлять произвольный компаратор при построении TreeMap. TreeMap автоматически сортирует на основе методов compareTo для ключевых объектов.

Смежные вопросы