我在排序HashMaps
與Java
值有一些問題。 我的代碼是:Java中的HashMap值排序不回正確的順序
@SuppressWarnings("unchecked")
Map<String, Integer> scores = ((HashMap<String, Integer>) prefs.get());
Map<String, Integer> sortedscores = sortByValues(scores);
printMap(scores);
System.out.println("==============");
printMap(sortedscores);
的prefs.get()返回一個Map<String, ?>
我轉換爲<String, Integer >
分揀功能:
public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return new LinkedHashMap<K,V>(sortedByValues);
}
public static void printMap(Map<String, Integer> unsortMap){
for (Map.Entry entry : unsortMap.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
}
的輸出是:
Key : John Doe Value : 1000
Key : balazs Value : 975
Key : Balazs Value : 900
Key : aladar Value : 975
Key : balazs2 Value : 975
Key : score Value : 1000
Key : house Value : 1037
==============
Key : balazs Value : 975
Key : aladar Value : 975
Key : balazs2 Value : 975
Key : Balazs Value : 900
Key : house Value : 1037
Key : John Doe Value : 1000
Key : score Value : 1000
第一個是未排序的,第二個是排序d。 我的問題是,第二輸出不在DESC順序(按價值計算)
編輯: 如果我創建一個hasmap自己正常工作:
Map<String, Integer> unsortMap = new HashMap<String, Integer>();
unsortMap.put("asd", 1);
unsortMap.put("asd2r1", 5);
unsortMap.put("house", 7);
unsortMap.put("3", 124);
unsortMap.put("7", 4);
unsortMap.put("5", 6);
unsortMap.put("6", 2);
unsortMap.put("8", 0);
但是,如果我有這樣試試:Map<String, Integer> scores = ((HashMap<String, Integer>) prefs.get());
我得到那個奇怪的命令。
好的,這裏有什麼問題? – midhunhk 2013-03-27 13:50:32
值應該排序DESC順序,但它是975,975,975,900,1037,1000,1000,1037不是它應該在的位置 – user1601401 2013-03-27 13:51:11
如果您的排序順序搞亂了,比較器看起來像是錯了。 – midhunhk 2013-03-27 13:53:25