gpt4 book ai didi

java - 比较器在 TreeMap 中创建重复项

转载 作者:行者123 更新时间:2023-11-30 03:38:10 25 4
gpt4 key购买 nike

我想按值对我的 HashMap(或 TreeMap)进行排序。我通过创建一个对值进行排序的自定义比较器来实现这一点。然而,每当我再次将 HashMap 中的所有条目放入其中时,我都会得到重复项。

如何按值排序而不创建重复项?

代码

public class Test {
public static void main(String[] args) {

HashMap<Integer, String> hMap = new HashMap<Integer, String>();
ValueComparator vc = new ValueComparator(hMap);
TreeMap<Integer, String> tMap = new TreeMap<Integer, String>(vc);

hMap.put(0, "b");
hMap.put(1, "c");
hMap.put(2, "a");
tMap.putAll(hMap);
tMap.putAll(hMap);

for (Map.Entry<Integer, String> entry : tMap.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}

class ValueComparator implements Comparator<Integer> {
Map<Integer, String> base;

public ValueComparator(Map<Integer, String> base) {
this.base = base;
}

public int compare(Integer a, Integer b) {
if (base.get(a).charAt(0) >= base.get(b).charAt(0))
return 1;
else return -1;
}
}

输出

2 a
2 a
0 b
0 b
1 c
1 c

最佳答案

需要修改如下逻辑,处理-1、0和1这三种情况

public int compare(Integer a, Integer b) {
if (base.get(a).charAt(0) == base.get(b).charAt(0))
return 0;

else if (base.get(a).charAt(0) > base.get(b).charAt(0))
return 1;

else
return -1;
}

输出

2 a
0 b
1 c

关于java - 比较器在 TreeMap 中创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27333385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com