支持数据结构是一个HashMap,它基本上是一个Entry数组。由于支持结构是一个数组,迭代顺序如何随时间变化?
答案 0 :(得分:2)
哈希集的迭代顺序是任意的,但它是确定性的。
除非在迭代之间更改集,否则顺序不会随时间而变化。给定相同的项目集和特定的插入顺序,迭代的顺序将保持不变。
如果插入或删除项目,迭代顺序将会改变。底层数据结构(列表节点数组)保持不变,但由于项目的哈希代码将项目放置到哈希桶中,因此在迭代哈希时无法确定特定项目的最终位置集。
文档确实say无法保证迭代的顺序:
[
HashSet
]不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。
“随着时间的推移”部分非常模糊,原因有两个:不清楚“随着时间的推移”是指程序的运行时间,还是升级到Java类库之间的时间,也是不清楚在允许迭代顺序改变的时间内是否允许修改。
然而,了解散列集的组织和实现方式,非常接近确定迭代顺序在没有更新的情况下将保持确定性。但这并不意味着您可以依赖订单,因为它随时都可能发生变化。