2016-04-21 28 views
0

我使用下面的代码按我的散列值的值排序。但结果似乎令人困惑,因为它只保留一个值为一个条目并删除具有重复值的另一个条目。 这里是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

这非常有意义。你已经声明如果allCandidateMap中两个键映射到相等值,它们应该被认为是相等的,因为你的compare将返回0

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

相关问题