2014-02-17 38 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非常相似。