我需要实现一个必须具有自定义哈希值(返回整数年+车型号)的Map,并且还必须按递减顺序排序。如果我使用TreeMap,我不能创建自定义哈希,如果我使用HashMap,我无法订购它。我怎么能同时使用?我尝试使用自定义比较器创建一个TreeMap以降低顺序,但它忽略了我对hashCode的覆盖,并添加了应该位于同一位置的不同位置的元素,即使它们的哈希码不同。我该如何解决这个问题?
class MyComparator implements Comparator<Integer> {
public int compare(Integer a, Integer b) {
if (a < b) {
return 1;
}
return 0;
}
}
答案 0 :(得分:1)
TreeMaps使用compareTo
方法(如果元素具有可比性)或给定的比较器来排序元素。它们根本不使用hashCode()
,因此您可以拥有所需的任何实现。
您的问题可能出在比较器本身。您可能有两个相等元素具有相同hashCode的情况,但比较器不会为它们返回0。所以你希望TreeSet只有这些元素中的一个,但它并没有看到它们彼此相等。