如何对具有公共密钥的两个HashMap进行排序?

时间:2014-02-17 16:40:09

标签: java 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 进行排序,其中scoreName HashMap 也应该根据scoreValue进行排序。

示例:

scoreValue = 5,1,7,7,9 scoreName = a,b,c,d,e

排序后得分值= 1,5,7,7,9       sortScoreName = b,a,c,d,e

我可以对scoreValue进行排序

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

但这不是我要找的解决方案!

2 个答案:

答案 0 :(得分:0)

HashMaps是无序集合,因此您无法对它们进行排序。

这里更好的是拥有一个Score对象,其中包含键,名称和值作为成员变量。

然后只需要一个简单的List<Score>,然后在列表中调用Collections.sort()

如果您还需要快速ID查找,那么您可以将HashMap的ID设为Score。在需要时按顺序迭代列表。在地图中查找它们以查找给定ID的分数和名称。

如果每个Score对象想知道它在列表中的排名,那么你可以在排序后循环遍历排序的集合,并在Score对象中有一个变量来存储它。 / p>

TreeMap / TreeSet在这种情况下也可能有用,但它们不允许随机访问(即位于第3位的人)和TreeMap根据地图中的键进行排序,而不是值。

答案 1 :(得分:0)

HashMap没有任何排序。您可以使用LinkedHashMap,也可以使用树(或类似于树的数据结构)。使用LinkedHashMap与使用HashMap非常相似。