当前位置: 首页 > 知识库问答 >
问题:

Map.keySet 和 Map.values 上的迭代顺序相同?

姜胤
2023-03-14

对于以下地图:

Map<Integer, Integer> map = ...;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);

这是代码。。。

for (Integer i : map.keySet()) System.out.println(i);
for (Integer i : map.values()) System.out.println(i);

...保证两次打印相同的序列?

如果没有,在例如< code>java.util.HashMap中是否有任何保证?

共有3个答案

傅阳炎
2023-03-14

是的。算是吧。您可以使用sortedMap的子类,即TreeMap。这将使键保持自然顺序。(或者您可以给它一个特定的比较器)。但是当您使用树映射时,您必须确保comareTo方法“必须与等于一致”。阅读javadocs了解更多详细信息。但简而言之,是的,您可以对地图进行排序

吕俊哲
2023-03-14

不,不保证。一个是设置,一个是集合,都不保证订单。

如果您想保持秩序。可能是LinkedHashMap()entrySet()帮助您。

西门经国
2023-03-14

不,没有保证,尽管在实践中它会发生(映射没有很好的理由为键和值使用不同的迭代器)。

如果要保证迭代顺序,请迭代 entrySet():

for (Map.Entry<Integer,Integer> entry : map.entrySet())
    // ...

由于您询问了<code>HashMap</code>,还请注意,对映射的任何更改都可能会更改迭代顺序,这是映射被重新设置的结果。

 类似资料:
  • 我使用以下代码 并且输出总是 但这是否是密钥和打印的值不匹配的任何可能性,如 例如。

  • 问题内容: 好的,我认为这可能是一个老问题,但是我在stackoverflow上没有发现任何东西。在go中,不保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保留在一个切片中并对该切片进行排序。然后,对该切片进行迭代以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将以可再现的顺序排列)。因此,这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是,当

  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 问题内容: 我尝试了一个小时,但没有找到任何最佳方法来实现反向的哈希图迭代,这就是我拥有的哈希图。 我也看过TreeMap的例子, 但是treemap也按升序给出,我想要的是降序。 问题答案: Hashmap没有特定的顺序。但是您可以使用TreeMap。 也许这个简单的例子可以帮助您:

  • 问题内容: 我需要一个Map,它可以 按其值 的降序进行迭代。是否有像Apache Commons或Guava这样的标准库提供这种地图? 问题答案: 我会用番石榴来做到这一点,如下所示:

  • 问题内容: 我担心给出的文件和目录的顺序。如果我有这些目录,,,,,,,,,,,,,什么是输出列表的顺序? 它是按数值排序的吗? 或按ASCII值排序,如? 此外,如何获得特定的排序? 问题答案: 用途。这是的文档字符串: listdir(路径)-> list_of_strings 返回一个列表,其中包含目录中条目的名称。 该列表按任意顺序排列 。它不包括特殊条目“。” 和“ ..”,即使它们存在