我想按值排序我的HashMap
(或TreeMap
)。我通過創建一個自定義Comparator
來達到這個目的。但是,無論何時我再次輸入HashMap
的所有輸入項,我都會得到重複項。比較器在TreeMap中創建副本
如何根據值排序而不創建重複項?
CODE
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;
}
}
OUTPUT
2 a
2 a
0 b
0 b
1 c
1 c
您的輸入是什麼?你爲什麼要比較第0個字符,在你的情況下是否可行的比較?爲什麼在平等而不是0的情況下返回1? – 2014-12-06 15:57:16
這只是我的問題的演示。但正如你所說,我並沒有完全實現比較器! – TomTom 2014-12-06 16:08:46