如何通过Java中的关键字对Map值进行排序 [英] how to sort Map values by key in Java
问题描述
数据如下:<question1,1>"question9,1> <question2,4><question5,2>
基于其键的地图。所以最后我会有 question1,question2,question3
....一个等等。
最终我试图从这张地图中获取两个字符串。第一个字符串:问题(按顺序1 ..10)和第二个字符串:答案(与问题相同的顺序)。
现在我有以下内容:
Iterator it = paramMap .entrySet()迭代();
while(it.hasNext()){
Map.Entry pairs =(Map.Entry)it.next();
questionAnswers + = pairs.getKey()+,;
}
这让我得到一个字符串中的问题,但它们不是顺序的。
简短答案
使用 TreeMap
。这正是它的原因。
如果此地图传递给您,您无法确定类型,则可以执行以下操作:
的SortedSet<字符串> keys = new TreeSet< String>(map.keySet());
(String key:keys){
String value = map.get(key);
//做某事
}
这将在自然中迭代地图
更长的答案
从技术上讲,您可以使用实现 SortedMap
的任何东西,但除了罕见的情况,这相当于 TreeMap
,就像使用映射
实现通常等于 HashMap
。
对于您的密钥是不实现Comparable的复杂类型或您不想使用自然顺序的情况, TreeMap
和 TreeSet
有额外的构造函数,让您传递一个比较器
:
//放置在示范中,但不一定是匿名类
比较器&Foo> comparator = new Comparator&Foo>(){
public int compare(Foo o1,Foo o2){
...
}
}
SortedSet&Foo& keys = new TreeSet< Foo>(比较器);
keys.addAll(map.keySet());
记住使用 TreeMap
或 TreeSet
,它将具有不同于 HashMap
或 HashSet
的性能特征。粗略地说,找到或插入元素的操作将从 O(1)转到 O(Log(N))。
在$ code> HashMap 中,从1000个项目移动到10,000不会真正影响您查找元素的时间,但对于 TreeMap
查找时间将减慢约3倍(假设为Log 2 )。从1000到100,000的每个元素查找速度将慢6倍。
I have a Map in java that has strings for both .
Data is like following: <"question1", "1">, <"question9", "1">, <"question2", "4">, <"question5", "2">
I want to sort the map based on its keys. So In the end I will have question1, question2, question3
....an so on.
Eventually I am trying to get two strings out of this Map. First String: Questions ( in order 1 ..10) and Second String: Answers (in same order as question).
Right now I have the following:
Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
questionAnswers += pairs.getKey()+",";
}
This gets me the questions in a string but they are not in order...
Short answer
Use a TreeMap
. This is precisely what its for.
If this map is passed to you and you cannot determine the type, then you can do the following:
SortedSet<String> keys = new TreeSet<String>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
This will iterate across the map in natural order of the keys.
Longer answer
Technically, you can use anything that implements SortedMap
, but except for rare cases this amounts to TreeMap
, just as using a Map
implementation typically amounts to HashMap
.
For cases where your keys are a complex type that doesn't implement Comparable or you don't want to use the natural order then TreeMap
and TreeSet
have additional constructors that let you pass in a 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());
Remember when using a TreeMap
or TreeSet
that it will have different performance characteristics than HashMap
or HashSet
. Roughly speaking operations that find or insert an element will go from O(1) to O(Log(N)).
In a HashMap
, moving from 1000 items to 10,000 doesn't really affect your time to lookup an element, but for a TreeMap
the lookup time will be about 3 times slower (assuming Log2). Moving from 1000 to 100,000 will be about 6 times slower for every element lookup.
这篇关于如何通过Java中的关键字对Map值进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!