当前位置: 首页 > 面试题库 >

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

南宫龙野
2023-03-14
问题内容

我有一个同时包含键和值的字符串的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中,如何使用lambda同时按键和值对Map进行排序?,包括了在Java中,如何使用lambda同时按键和值对Map进行排序?的使用技巧和注意事项,需要的朋友参考一下 Map接口实现了Collection接口,该接口提供了Map数据结构的功能。 映射不包含任何重复的键,并且每个键都与一个值相关联。 我们可以使用与它们关联的键来访问和修改值。 在以下两个示例中,我们可以借助l

  • 问题内容: 这是一个非常基本的问题,我对Java并不是很好。我有一个Map,我想按排序顺序获取列表或某些键,以便可以对其进行迭代。 问题答案: 使用,这是接口的实现。它按排序顺序显示其密钥。 如果您使用的另一个Map实现没有按照您的喜好进行排序,则可以将其传递给的构造函数,以使用排序键创建新的Map。 一个与实现接口的任何类型的键一起使用的键,将它们按“自然”顺序放置。对于不需要的键或不需要的自然

  • 问题内容: 我一直在寻找按值排序的方法。我找到了这篇文章,它解决了我的排序问题,但不完全是。根据帖子,我编写了以下代码: 输出: 从输出中可以看到,该方法始终返回。原因是我的方法永不返回,我通过发表这篇帖子弄清楚了。 有人在那篇文章中建议了以下方法来解决价值问题: 我已经测试了这段代码,它引入了一个关键的合并问题。换句话说,当值相等时,它们的对应键将合并。 我还尝试了以下方法: 它也不起作用。一些

  • 问题内容: 或者,实际上,如何按多个键对词典列表进行排序? 我有一个字典列表: 并且我需要使用由Total_Points反转的多键排序,然后不由反转。 可以在命令提示符下完成,如下所示: 但是我必须通过一个函数来运行它,在其中传递列表和排序键。例如,。 对于传递给multikeysort函数的任意数量的键,如何使用lambda行将对列表进行排序,并考虑到sortkey可以具有任意数量的键,并且需要

  • 问题内容: 如何根据值对字典进行排序,以便输出为: 当前尝试(排序不正确): 问题答案: 您需要对字典值而不是键进行排序。您可以从字典中创建一个元组数组,按其值对它进行排序,如下所示: Xcode 9•Swift 4 或 Xcode 8•Swift 3 使用按键对字典进行排序 使用字典的键和本地化的比较来对字典进行排序:

  • 我想按值长度对Map进行排序。例如,我有这样的代码: 结果是: 所以我想做的是按值长度对这个Map进行排序,所以它返回: