带有自定义比较器的TreeMap不会删除条目

时间:2015-02-13 18:19:12

标签: java treemap

所以我有一个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)它没有删除它时,因为我打印它时仍然会看到它。我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

您的compare方法存在缺陷,因为它无法返回0。如果两个对象为equal,则需要返回0,而不是1

如果两个compare相等,请将0方法更改为返回Integer

这将允许TreeMap找到Integercompare依赖于0返回{{1}}来确定相等。

答案 1 :(得分:1)

compare方法的实施违反了合同。如果两个对象相等,则应该返回0。这就是为什么它不起作用。