Java *中的HashSet如何在迭代时不保证顺序?

时间:2016-10-02 02:39:45

标签: java collections hashmap hashset

支持数据结构是一个HashMap,它基本上是一个Entry数组。由于支持结构是一个数组,迭代顺序如何随时间变化?

1 个答案:

答案 0 :(得分:2)

哈希集的迭代顺序是任意的,但它是确定性的。

除非在迭代之间更改集,否则顺序不会随时间而变化。给定相同的项目集和特定的插入顺序,迭代的顺序将保持不变。

如果插入或删除项目,迭代顺序将会改变。底层数据结构(列表节点数组)保持不变,但由于项目的哈希代码将项目放置到哈希桶中,因此在迭代哈希时无法确定特定项目的最终位置集。

文档确实say无法保证迭代的顺序:

  

[HashSet]不保证集合的迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。

“随着时间的推移”部分非常模糊,原因有两个:不清楚“随着时间的推移”是指程序的运行时间,还是升级到Java类库之间的时间,也是不清楚在允许迭代顺序改变的时间内是否允许修改。

然而,了解散列集的组织和实现方式,非常接近确定迭代顺序在没有更新的情况下将保持确定性。但这并不意味着您可以依赖订单,因为它随时都可能发生变化。