2014-02-17 43 views
0

我有兩個HashMap的它看起來像這樣,如何排序兩個具有公共密鑰的HashMap?

public HashMap<Integer, String> scoreName = new HashMap<Integer, String>(); 
public HashMap<Integer, Integer> scoreValue = new HashMap<Integer, Integer>(); 

這裏既有的HashMap具有通用密鑰。我想排序scoreValue HashMap和scoreName HashMap where scoreName HashMap也應該根據scoreValue進行排序。

實施例:

scoreValue = 5,1,7,7,9 scoreName排序scoreValue = 1,5,7,7,9後= A,B,C,d,E

排序scoreName = b,A,C,d,E

我可以整理我的scoreValue

List sortedKeys = new ArrayList(scoreValue.values()); 
    Collections.sort(sortedKeys); 

,但是這不是我要找的解決方案!

+2

散列圖沒有排序。你想提取這些值並對它們進行排序嗎? –

+0

尋找不同的'Map'實現,它維護順序。此外,保持密鑰的排序。 –

+0

我無法理解需要兩張地圖。 – Batty

回答

0

HashMaps是無序集合,所以你不能對它們排序。

會是怎樣在這裏更好的是有一個Score對象,它包含密鑰,名稱和值作爲成員變量。

這時正好有一個簡單的List<Score>,然後調用Collections.sort()名單上。

如果您還需要快速ID查找,那麼您可以將HashMap的ID設爲Score。當你需要它們時,迭代列表。在地圖上查找它們以查找給定ID的分數和名稱。

如果每個Score對象想要知道它在列表中的排名,那麼可以在排序後遍歷排序的集合,並在Score對象中有一個變量來存儲它。

TreeMap中/ TreeSet中也可能是在這種情況下有用的,但他們不允許隨機訪問(即誰是在第3位)和TreeMap各種基於地圖,而不是價值的關鍵。

0

HashMap沒有任何排序。您可以使用LinkedHashMap,也可以使用樹(或類似於樹的數據結構)。使用LinkedHashMap與使用HashMap非常相似。