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'。这个实现的目的是创建一个在插入元素时按值排序的映射(我不需要在插入所有内容后对映射进行排序的实现)。
我的代码是否有一些小的修改,以免丢失具有重复值的元素?在两个重复值的情况下,排序顺序可以是随机的。
答案 0 :(得分:0)
请务必将字符串作为Comparable
的一部分。例如(您的确切逻辑可能想要改变):
public int compareTo(CompoundKey other) {
return other.count.compareTo(this.count) + other.key.compareTo(this.key);
}
因为它现在只查看数字,所以它只会将数字视为 自然顺序。您需要包含key
作为其中的一部分。