如何不丢失TreeMap中具有相同值的元素?

时间:2017-11-18 01:22:21

标签: java

class CompoundKey implements Comparable<CompoundKey>{
        String key;
        Integer count;

        public CompoundKey(String key, Integer count){
            this.key = key;
            this.count = count;
        }

        @Override
        public int compareTo(@Nonnull CompoundKey other) {
            return (other.count.compareTo(this.count));
        }
    }

    public static void main(String[] args) {

        Map<CompoundKey, Integer> map = new TreeMap<>();
        map.put(new CompoundKey("a", 3), 3);
        map.put(new CompoundKey("b", 1), 1);
        map.put(new CompoundKey("c", 8), 8);
        map.put(new CompoundKey("d", 3), 3);
        map.put(new CompoundKey("e", 9), 9);

        for (CompoundKey key : map.keySet()) {
            System.out.println(key.key + "->" + map.get(key));
        }
    }

这将打印如下:

e->9
c->8
a->3
b->1

在打印输出中,缺少'd-&gt; 3'。这个实现的目的是创建一个在插入元素时按值排序的映射(我不需要在插入所有内容后对映射进行排序的实现)。

我的代码是否有一些小的修改,以免丢失具有重复值的元素?在两个重复值的情况下,排序顺序可以是随机的。

1 个答案:

答案 0 :(得分:0)

请务必将字符串作为Comparable的一部分。例如(您的确切逻辑可能想要改变):

public int compareTo(CompoundKey other) {
    return other.count.compareTo(this.count) + other.key.compareTo(this.key);
}

因为它现在只查看数字,所以它只会将数字视为 自然顺序。您需要包含key作为其中的一部分。