如果每个对象添加到java.util.HashSet中器具的Object.Equals()和是Object.hashCode()以确定方式,是迭代顺序在HashSet的保证用于每加入相同组元素是相同的, 而不管 的他们被添加的顺序?
额外的问题:插入顺序也一样怎么办?
(假定Sun JDK6具有相同的HashSet初始化。)
编辑: 我最初的问题尚不清楚。它与HashSet的一般合同无关,而是与Sun在JDK6中对HashSet的实现所提供的有关确定性的保证有关。是天生的不确定性吗?哪些因素会影响其Iterator使用的顺序?
绝对不。
每当发生桶碰撞时,插入顺序都会直接影响迭代顺序:
当两个元素最终位于同一个存储桶中时,插入的第一个元素也将是迭代过程中返回的第一个元素,至少在冲突处理和迭代的实现很简单的情况下(Sun的java.util.HashMap一个)
java.util.HashMap