我有一个映射,其中包含键和值的字符串
数据如下:
“问题1”、“1”
“问题9”,“1”
“问题2”、“问题4”
“问题5”、“2”
我想根据地图的键对地图进行排序。因此,最后,我将有问题1、问题2、问题3…等等
最后,我试图从这张地图中找出两条线
- 第一个字符串:问题(顺序为1..10)
- 第二个字符串:答案(与问题的顺序相同)
现在我有以下几点:
Iterator it=paramMap.entrySet().Iterator();
while(it.hasNext()){
Map.Entry pairs=(Map.Entry)it.next();
问题答案+=pairs.getKey()+“,”;
}
这让我把问题排成了一行,但它们不符合顺序
简短回答
使用aTreeMap。这正是它的目的
如果此映射已传递给您,而您无法确定类型,则可以执行以下操作:
分类数据集<;字符串>;键=新树集<&燃气轮机;(map.keySet());
对于(字符串键:键){
字符串值=map.get(键);
//做点什么
}
这将按键的自然顺序在地图上迭代
更长的答案
从技术上讲,您可以使用实现SortedMap的任何东西,但除了少数情况外,这相当于TreeMap,正如使用Map实现通常相当于HashMap
对于键是不实现Comparable的复杂类型或不希望使用自然顺序的情况,则TreeMap和TreeSet具有额外的构造函数,允许您传入Comparator:
//为演示内联放置,但不必是lambda表达式
比较器<;Foo>;比较器=(Foo o1,Foo o2)->;{
...
}
分类集<;Foo>;键=新树集<&燃气轮机;(比较国);
addAll(map.keySet());
请记住,当使用TreeMap或TreeSet时,它将具有与HashMap或HashSet不同的性能特征。粗略地说,查找或插入元素的操作将从O(1)到O(Log(N))
在HashMap中,从1000项移动到10000项实际上并不影响查找元素的时间,但是对于TreeMap来说,查找时间大约要慢3倍(假设Log2)。对于每个元素查找,从1000移动到100000将慢6倍左右