【发布时间】:2014-12-06 15:51:19
【问题描述】:
我想按值对我的HashMap(或TreeMap)进行排序。我通过创建一个按值排序的自定义Comparator 来实现这一点。但是,每当我再次输入来自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
【问题讨论】:
-
您的意见是什么?为什么要按第 0 个字符进行比较,在您的情况下这是一个可行的比较吗?为什么在相等的情况下返回 1 而不是 0?
-
这只是我的问题的一个演示。但正如你所说,我并没有完全理解比较器的实现!
标签: java sorting map comparator treemap