這已被問了好幾次,我知道,但幫助我理解了一些東西。按價值排序地圖,需要說明
你有你需要的價值
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("a", 1);
m.put("b", 13);
m.put("c", 22);
m.put("d", 2);
排序的地圖你調用一個方法來做到這一點
public static List<String> sortByValue(final Map<String, Integer> unsortedMap) {
List<String> sortedKeys = new ArrayList<String>();
sortedKeys.addAll(unsortedMap.keySet());
Collections.sort(sortedKeys, new MapComparator(unsortedMap));
return sortedKeys;
}
你有一個比較類
public MapComparator(Map<String, Integer> m) {
this.m = m;
}
@Override
public int compare(String a, String b) {
int x = m.get(a);
int y = m.get(b);
if (x > y)
return x;
if (y > x)
return y;
return 0;
}
此代碼,顯然是有缺陷的。請幫我理解爲什麼?
路易斯,這不起作用。結果仍然出現未排序 – JAM 2012-02-07 03:23:15
使用未包含在原始映射中的值將導致「拆除」(整數)空值時出現'NullPointerException',而不是因爲編輯時出現任何問題。 – 2012-02-07 03:24:08
@JAM,你可以發佈你的更新代碼嗎?這看起來應該起作用。 – 2012-02-07 03:32:33