【问题标题】:Can I use a Comparator class to order a TreeMap in Java 1.6?我可以使用 Comparator 类在 Java 1.6 中订购 TreeMap 吗?
【发布时间】:2016-10-14 13:52:25
【问题描述】:

我在尝试做的 Java 6 应用程序中遇到以下问题

QuotaTirComparator bvc = new QuotaTirComparator(mappaQuote);
TreeMap<Integer, QuotaTir> sorted_map = new TreeMap<Integer, QuotaTir>(bvc);

得到一个排序的TreeMap。

但是 Eclipse 给了我以下错误信息:

The constructor TreeMap&lt;Integer,QuotaTir&gt;(QuotaTirComparator) is undefined

为什么? Java 6 中没有启用此功能吗?怎么了?我错过了什么?

【问题讨论】:

  • 在您的 TreeMap 中,比较器必须扩展 Comparator 而不是 Comparator。请注意,TreeMap 的构造函数定义为“TreeMap(Comparator super K>comparator)”,其中 K 是 Key 类型。另一种表达方式是“不,你不能那样做”。

标签: java hashmap comparator treemap java-6


【解决方案1】:

我的猜测是 QuotaTirComparator 不是 Comparator 显然,比较器必须用于键,而不是值。由于Integer 已经具有自然排序,我会尝试完全删除比较器。

一棵树用相关的值排序。如果要对 QuoteTir 进行排序,则需要它们的 SortedSet。

采用比较器的构造函数正在添加 Java 1.2 http://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html#TreeMap-java.util.Comparator-

【讨论】:

    【解决方案2】:

    【讨论】:

    • 虽然这也是我最初的基于比较器名称和值类型名称,但有些东西告诉我编译器会针对这种情况给出不同的错误。所以这可能是解决彼得指出的问题后出现的问题的答案。
    • Eclipse 给出了与他描述的相同的错误,除了 TreeMap 中的参数化类型信息。
    • 好的,我错过的是 OP 实际上发布参数化类型错误的可能性,但由于这是浏览器&lt;..&gt; 部分未显示。我在问题中修复了它。
    猜你喜欢
    • 2012-04-22
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多