[英]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.