两个java.util.Iterators到同一个集合:他们必须以相同的顺序返回元素吗?

时间:2012-05-24 09:43:31

标签: java api collections iterator contract

这更像是一个理论问题。如果我有一个未被排序的任意集合c并且我通过调用java.util.Iterator两次获得两个c.iterator(),那么两个迭代器都必须返回c个元素同一个订单?

我的意思是,在实践中他们可能总是这样,但他们是否被迫通过合同这样做?

谢谢, 扬

3 个答案:

答案 0 :(得分:7)

不,他们不是。

  

“无法保证元素的顺序   返回(除非此集合是某个类的实例   提供保证)。“

请参阅Collection#iterator api contract

包括从一个迭代器到下一个迭代器(因为它没有说明要求它)。

还要考虑在获取这两个迭代器之间的基础集合中可能发生了某些变化!添加或删除的东西。

答案 1 :(得分:2)

迭代器的实现由特定的Collection类提供。 List的Iterator将给出有序元素,而Set不会

答案 2 :(得分:1)

因为大多数数据结构在默认情况下没有排序,所以不确定它们是否会以相同的顺序迭代。

如果您想要相同的订单,则必须先对收集品进行排序。