如何通过Java中的关键字对Map值进行排序

问题:

我有一个java中的Map,它们都有字符串。
数据如下:<"question1", "1">, <"question9", "1">, <"question2", "4">, <"question5", "2">
我想根据它的键对地图进行排序。所以最终我会有question1, question2, question3 ….等等。
最后我试图从这张地图中得到两个字符串。第一个字符串:问题(按顺序1 ..10)和第二个字符串:答案(与问题相同的顺序)。
现在我有以下几点:

Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
 questionAnswers += pairs.getKey()+",";
}

这让我得到一个字符串中的问题,但它们不是顺序的

回答:

简短的答案

使用TreeMap。这正是它的意思。
如果此地图传递给您,并且您无法确定类型,那么您可以执行以下操作:

SortedSet<String> keys = new TreeSet<String>(map.keySet());
for (String key : keys) { 
   String value = map.get(key);
   // do something
}

这将按键的自然顺序遍历地图。

更长的答案

从技术上讲,您可以使用任何实现SortedMap的任何东西,但是除少数情况下,TreeMap之外,正如使用Map实现通常相当于HashMap
对于您的键是不实现Comparable的复杂类型或您不想使用自然顺序的情况,则TreeMapTreeSet具有其他构造函数,可让您传递Comparator

// placed inline for the demonstration, but doesn't have to be an anonymous class
Comparator<Foo> comparator = new Comparator<Foo>() {
  public int compare(Foo o1, Foo o2) {
    ...
  }
}
SortedSet<Foo> keys = new TreeSet<Foo>(comparator);
keys.addAll(map.keySet());

请记住,当使用TreeMapTreeSet时,它将具有不同于HashMapHashSet的性能特征。粗略地说,找到或插入元素的操作将从O(1)转到为O(log(N))
HashMap中,从1000个项目移动到10,000个并不会真正影响您查找元素的时间,但对于TreeMap,查找时间将减慢约3倍(假设为Log 2)。从1000到100,000,每个元素查找速度将慢6倍。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: how to sort Map values by key in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

43 + = 47