HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("a", 4);
map.put("c", 6);
map.put("b", 2);
所需的輸出(HashMap的)一個HashMap:如何排序整數值
c : 6
a : 4
b : 2
我一直沒能找到有關價值遞減的順序什麼。
這是如何實現的? (額外的類別不是首選)
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("a", 4);
map.put("c", 6);
map.put("b", 2);
所需的輸出(HashMap的)一個HashMap:如何排序整數值
c : 6
a : 4
b : 2
我一直沒能找到有關價值遞減的順序什麼。
這是如何實現的? (額外的類別不是首選)
試試這個:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 4);
map.put("c", 6);
map.put("b", 2);
Object[] a = map.entrySet().toArray();
Arrays.sort(a, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Map.Entry<String, Integer>) o2).getValue()
.compareTo(((Map.Entry<String, Integer>) o1).getValue());
}
});
for (Object e : a) {
System.out.println(((Map.Entry<String, Integer>) e).getKey() + " : "
+ ((Map.Entry<String, Integer>) e).getValue());
}
輸出:
c : 6
a : 4
b : 2
這將鍵,值對作爲單個對象放入數組中,我需要能夠在排序後單獨檢索鍵,值 – GameDevGuru
它將Map.Entry分開提取鍵和值,參見upate –
Hash
元素的特點之一是他們在做諸如添加,刪除等操作時的特殊速度,這正是因爲他們使用哈希算法,這意味着他們不保留我們知道的元素的順序或後代。這意味着與Hash
數據結構,你不會達到你想要的。
這將是一個非常好的建議,但請不要回答這個問題。 – Ashish
而不是說這是不可能的,那麼建議如何將它作爲一個ArrayList先投射出來。 – GameDevGuru
@ user2864740 List
不能明確地排序的HashMap,但可以在條目進行排序。也許是這樣的幫助:
// not yet sorted
List<Integer> intList = new ArrayList<Integer>(map.values());
Collections.sort(intList, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
// for descending order
return o2 - o1;
}
});
我相信OP想要共同擁有關鍵和價值,然而在結果被使用。 – user2864740
這將鍵與價值分離,沒有期望的結果。 – GameDevGuru
這是真的,我想他是打印出來的東西,所以他只需要做一個方法,調用map.getKey(value)並返回一個字符串...或任何他需要的東西。 –
你不能。但是你可以排序的*條目*(一次在一個列表或者其他有序集合)的值:開始,'列表條目=新的ArrayList <進入<字符串,整數>>(hash.getEntries())';然後排序。 – user2864740
@RC這是不一樣的問題.. – GameDevGuru
(雖然我認爲這是一個「複製」,在其他問題接受的答案是相當可怕的 - 讀了所有的答覆我也建議使用[陣]列表。 VS LinkedHashMap的作爲輸出集合) – user2864740