Java HashMap keySet()的迭代顺序是否一致?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

我明白从Map的keySet()方法返回的Set不能保证任何特定的顺序。

我的问题是,它是否保证多次迭代的顺序相同。例如

Map<K,V> map = getMap();

for( K k : map.keySet() )
{
}

...

for( K k : map.keySet() )
{
}

在上面的代码中,假设映射未被修改,keySet的迭代将按照相同的顺序进行。使用Sun的jdk15它按照相同的顺序进行迭代,但在依赖这种行为之前,我想知道是否所有的JDK都会执行相同的操作。

我从答案中看到我不能依赖它。太糟糕了。我希望摆脱不必建立一些新的集合来保证我的订购。我的代码需要遍历,做一些逻辑,然后再次以相同的顺序迭代。我只需要从keySet中创建一个新的ArrayList来保证顺序。

提问于
用户回答回答于

如果没有声明在API文档中保证,那么您不应该依赖它。甚至从同一供应商的JDK,行为甚至可能会从JDK的一个版本更改为下一版本。

你可以很容易地获得集合,然后自己排序,对吧?

用户回答回答于

如果你想要一个迭代顺序不变的HashMap,你可以使用LinkedHashMap

此外,如果您遍历集合,则应始终使用它。迭代HashMap的entrySet或keySet要比LinkedHashMap慢得多。

扫码关注云+社区