为什么java允许TreeMap键和TreeSet值不可比?

时间:2016-02-17 20:00:05

标签: java treemap treeset

这是Java TreeMap实现的标题(1.8_071):

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

2 个答案:

答案 0 :(得分:8)

因为,正如文档所说,您可以使用不是Comparable的密钥并提供Comparator对象:

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 :(得分:1)

TreeMap根据文档的自然排序顺序进行排序,即它使用在键上定义的compareTo方法。如果没有找到compareTo,我猜它不会打扰排序,除非你在构造TreeMap时提供比较器类。

这样做的好处是您在构建TreeMap时不必提供自定义比较器。 TreeMap根据关键对象的compareTo方法自动排序。