我使用下面的代码按其值对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);
答案 0 :(得分:1)
这很有道理。您已声明,如果两个键映射到allCandidateMap
中的相等值,则应视为相等,因为您的compare
将返回0
。
这归结为你的比较器几乎颠倒了关键和价值的作用。如果您尝试执行其他操作,您可能会发现地图的值通常表现得像键一样。像get
和containsKey
这样的方法就好像他们正在查找值,而不是键(但get
会返回您传入的值,因此值仍然是价值观)。比较器定义了TreeMap
的行为,并且你要求非常奇怪的行为。