为什么在将hashmap传递给treemap时,具有重复值的不同键会消失

时间:2016-04-21 23:25:33

标签: java hashmap treemap

我使用下面的代码按其值对hashmap进行排序。但结果似乎很混乱,因为它只为一个值保留一个条目,并删除另一个具有重复值的条目。 这是Comparator代码:

class ValueComparator implements Comparator {
    Map map;

    public ValueComparator(Map map) {
        this.map = map;
    }

    public int compare(Object keyA, Object keyB) {
        Comparable valueA = (Comparable) map.get(keyA);
        Comparable valueB = (Comparable) map.get(keyB);
        return valueB.compareTo(valueA);
    }

以下是我如何使用它:

 TreeMap sortedMap=new TreeMap(new ValueComparator(allCandidateMap));
        sortedMap.putAll(allCandidateMap);

1 个答案:

答案 0 :(得分:1)

这很有道理。您已声明,如果两个键映射到allCandidateMap中的相等值,则应视为相等,因为您的compare将返回0

这归结为你的比较器几乎颠倒了关键和价值的作用。如果您尝试执行其他操作,您可能会发现地图的值通常表现得像键一样。像getcontainsKey这样的方法就好像他们正在查找值,而不是键(但get会返回您传入的值,因此值仍然是价值观)。比较器定义了TreeMap的行为,并且你要求非常奇怪的行为。

相关问题