在Java中如何按键对映射值排序?

我有一个映射,其中包含键和值的字符串

数据如下:

“问题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。这正是它的目的

如果此映射已传递给您,而您无法确定类型,则可以执行以下操作:

分类数据集<字符串>键=新树集&lt&燃气轮机;(map.keySet());
对于(字符串键:键){
字符串值=map.get(键);
//做点什么
}

这将按键的自然顺序在地图上迭代


更长的答案

从技术上讲,您可以使用实现SortedMap的任何东西,但除了少数情况外,这相当于TreeMap,正如使用Map实现通常相当于HashMap

对于键是不实现Comparable的复杂类型或不希望使用自然顺序的情况,则TreeMapTreeSet具有额外的构造函数,允许您传入Comparator

//为演示内联放置,但不必是lambda表达式
比较器<Foo>比较器=(Foo o1,Foo o2)->{
...
}
分类集<Foo>键=新树集&lt&燃气轮机;(比较国);
addAll(map.keySet());

请记住,当使用TreeMapTreeSet时,它将具有与HashMapHashSet不同的性能特征。粗略地说,查找或插入元素的操作将从O(1)O(Log(N))

HashMap中,从1000项移动到10000项实际上并不影响查找元素的时间,但是对于TreeMap来说,查找时间大约要慢3倍(假设Log2)。对于每个元素查找,从1000移动到100000将慢6倍左右

发表评论