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

我有一个同时包含键和值的字符串的Map。

数据如下:

“ question1”,“ 1”

“ question9”,“ 1”

“ question2”,“ 4”

“ question5”,“ 2”

我想根据其键对地图进行排序。因此,最后,我将拥有question1, question2, question3..依此类推。

最终,我试图从该Map中获取两个字符串。

  • 第一个字符串:问题(顺序为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<>(map.keySet());

for (String key : keys) {

String value = map.get(key);

// do something

}

这将以键的自然顺序遍历整个地图。

更长的答案

从技术上讲,你可以使用任何实现的方法SortedMap,但在极少数情况下等于TreeMap,就像使用Map实现通常等于一样HashMap。

如果你的键是无法实现Comparable的复杂类型,或者你不想使用自然顺序,然后TreeMap又有TreeSet其他构造函数可以让你传递Comparator

// placed inline for the demonstration, but doesn't have to be a lambda expression

Comparator<Foo> comparator = (Foo o1, Foo o2) -> {

...

}

SortedSet<Foo> keys = new TreeSet<>(comparator);

keys.addAll(map.keySet());

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

在中HashMap,从1000项增加到10,000项并不会真正影响你查找元素的时间,但是对于一个元素,TreeMap查找时间将慢3倍左右(假设Log 2)。对于每个元素查找,从1000迁移到100,000将慢6倍。

以上是 如何在Java中按键对Map值排序? 的全部内容, 来源链接: utcz.com/qa/410830.html

回到顶部