繁体   English   中英

在Java 8中迭代HashMap时出现稳定的元素排序问题

[英]Stable element ordering issue while iterating HashMap in Java 8

某些测试用例在我的应用程序中失败,这取决于元素的插入顺序。 它曾经在Java 7中运行良好,但是这个问题在升级到Java 8之后开始。在搜索互联网时我发现这篇文章

Java 8包含对HashSet / Map迭代顺序的一些可能的更改:

有些人可以建议我 - 我怎样才能以与插入顺序相同的顺序迭代Map中的对象,考虑到我仍然在我的开发环境中使用Java 1.8?

是的,当然HashMap从未保证可以按相同的顺序检索对象,但是它曾经在java 7中工作。

LinkedHashMap是否可以实现这一点?

是的,您必须使用LinkedHashMap ,即使在Java版本中也具有稳定的迭代顺序,正如其合同所强制执行的那样:

此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。 请注意,如果将键重新插入地图,则插入顺序不会受到影响。

有几次,我们还需要跨不同Java版本的可重复迭代顺序, LinkedHashMap工作正常。


TreeMap也是稳定迭代顺序的解决方案。 当然,它具有对数操作时间(与LinkedHashMap常量相反),迭代顺序不是插入顺序而是键顺序:

地图是根据其键的自然顺序排序的,或者是通常在排序地图创建时提供的比较器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM