【发布时间】:2017-11-07 21:50:30
【问题描述】:
我需要实现一个 Map,它必须有一个自定义哈希(返回一个整数 - 年份 + 汽车型号),它还必须按降序排序。如果我使用 TreeMap,我无法制作自定义哈希,如果我使用 HashMap,我无法订购它。我怎样才能同时使用两者?我尝试使用自定义比较器制作一个 TreeMap 以降低顺序,但它忽略了我对 hashCode 的覆盖,并添加了应该在同一个地方的不同位置的元素,即使它们的 hashcode 不同。我该如何解决这个问题?
class MyComparator implements Comparator<Integer> {
public int compare(Integer a, Integer b) {
if (a < b) {
return 1;
}
return 0;
}
}
【问题讨论】:
-
发布您的代码。如果您的比较器为应该不同的键返回 0,则它是错误的。没有您的代码,我们无法解释更多。
-
TreeMap 不使用 hashCode()。随意实现任何你想要的哈希码。
-
如果您编辑您的问题以包含所有相关代码,而不是在评论中发布其中一些代码会更好。
-
如果
a > b呢? -
它可能不能解决你所有的问题,但你的比较器是不完整的,即。它从不返回负值。阅读compare() 的规范并确保遵循它。
标签: java hashmap comparator hashcode treemap