所以我有一个TreeMap
,带有一个简单的自定义比较器,可根据其值对地图进行排序。
Map<Integer, Double> unsortedMap = new HashMap<Integer, Double>();
unsortedMap.put(..,..)
...
...
Map<Integer, Double> map = new TreeMap<Integer, Double>(new SortValues(unsortedMap));
public class SortValues implements Comparator<Integer> {
Map<Integer, Double> map;
SortValues(Map<Integer, Double> map) {
this.map = map;
}
@Override
public int compare(Integer one, Integer two) {
if(map.get(one) >= map.get(two)) {
return 1;
} else
return -1;
}
}
}
我打印出地图,看起来很好。但是,当我map.remove(key)
它没有删除它时,因为我打印它时仍然会看到它。我在这里缺少什么?
答案 0 :(得分:3)
您的compare
方法存在缺陷,因为它无法返回0
。如果两个对象为equal
,则需要返回0
,而不是1
。
如果两个compare
相等,请将0
方法更改为返回Integer
。
这将允许TreeMap
找到Integer
,compare
依赖于0
返回{{1}}来确定相等。
答案 1 :(得分:1)
您compare
方法的实施违反了合同。如果两个对象相等,则应该返回0
。这就是为什么它不起作用。