相同地图的自定义哈希码和比较器?

时间:2017-11-07 21:50:31

标签: java hashmap comparator hashcode treemap

我需要实现一个必须具有自定义哈希值(返回整数年+车型号)的Map,并且还必须按递减顺序排序。如果我使用TreeMap,我不能创建自定义哈希,如果我使用HashMap,我无法订购它。我怎么能同时使用?我尝试使用自定义比较器创建一个TreeMap以降低顺序,但它忽略了我对hashCode的覆盖,并添加了应该位于同一位置的不同位置的元素,即使它们的哈希码不同。我该如何解决这个问题?

class MyComparator implements Comparator<Integer> {
    public int compare(Integer a, Integer b) {
        if (a < b) {
            return 1;
        }
        return 0;
    }
}

1 个答案:

答案 0 :(得分:1)

TreeMaps使用compareTo方法(如果元素具有可比性)或给定的比较器来排序元素。它们根本不使用hashCode(),因此您可以拥有所需的任何实现。

您的问题可能出在比较器本身。您可能有两个相等元素具有相同hashCode的情况,但比较器不会为它们返回0。所以你希望TreeSet只有这些元素中的一个,但它并没有看到它们彼此相等。