我有一个包含键和值的字符串的 Map。
数据如下:
“问题1”,“1”
“问题 9”、“1”
“问题 2”、“4”
“问题5”、“2”
我想根据它的键对地图进行排序。所以,最后,我会有 question1, question2, question3
等等。
最终,我试图从这个地图中得到两个字符串:
- 第一个字符串:问题(按 1 .. 10 的顺序)
- 第二个字符串:答案(与问题的顺序相同)
现在我有以下内容:
Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
questionAnswers += pairs.getKey() + ",";
}
这让我得到了一个字符串中的问题,但它们不是按顺序排列的。
原文由 n00bstackie 发布,翻译遵循 CC BY-SA 4.0 许可协议
简答
使用
TreeMap
。这正是它的用途。如果这张地图传递给你,而你无法确定类型,那么你可以执行以下操作:
这将按键的自然顺序遍历地图。
更长的答案
从技术上讲,您可以使用任何实现
SortedMap
的东西,但除了极少数情况外,这相当于TreeMap
,就像使用Map
实现通常相当于HashMap
。对于您的键是未实现 Comparable 的复杂类型或您不想使用自然顺序的情况,则
TreeMap
和TreeSet
具有额外的构造函数,可让您传入一个Comparator
:Remember when using a
TreeMap
orTreeSet
that it will have different performance characteristics thanHashMap
orHashSet
.粗略地说,查找或插入元素的操作将从 O(1) 到 O(Log(N)) 。在
HashMap
中,从 1000 个项目移动到 10,000 个项目并不会真正影响您查找元素的时间,但对于TreeMap
查找时间将慢大约 1.3 倍(假设 Log 2 ).对于每个元素查找,从 1000 移动到 100,000 将慢大约 1.6 倍。