HashSet的迭代顺序

2023-11-30

如果添加到 java.util.HashSet 的每个对象都以确定性方式实现 Object.equals() 和 Object.hashCode(),则对于添加的每个相同元素集,HashSet 上的迭代顺序是否保证相同,不顾一切它们的添加顺序?

附加问题:如果插入顺序也相同怎么办?

(假设 Sun JDK6 具有相同的 HashSet 初始化。)

Edit:我原来的问题不清楚。它不是关于 HashSet 的一般契约,而是关于 Sun 在 JDK6 中实现 HashSet 提供的有关确定性的保证。它本质上是非确定性的吗?什么影响其迭代器使用的顺序?


绝对不。

每当发生存储桶碰撞时,插入顺序都会直​​接影响迭代顺序:

当两个元素最终位于同一个存储桶中时,插入的第一个元素也将是迭代期间返回的第一个元素,至少如果碰撞处理和迭代的实现很简单(以及 Sun 的java.util.HashMap is)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashSet的迭代顺序 的相关文章

随机推荐