【问题标题】:Why java allows TreeMap keys and TreeSet values to be non comparable?为什么 java 允许 TreeMap 键和 TreeSet 值不可比较?
【发布时间】:2016-02-18 04:07:03
【问题描述】:

这里是 java TreeMap implementation(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

【问题讨论】:

    标签: java treemap treeset


    【解决方案1】:

    因为,正如文档所说,您可以使用不是 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)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-07-19
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多