【发布时间】:2012-05-30 21:17:48
【问题描述】:
这更像是一个理论问题。如果我有一个未排序的任意集合c,并且我通过调用c.iterator() 两次获得了两个java.util.Iterators,那么两个迭代器是否必须以相同的顺序返回c 的元素?
我的意思是,实际上他们可能总是会这样做,但他们是否是通过合同强制这样做的?
谢谢, 一月
【问题讨论】:
标签: java api collections iterator contract
这更像是一个理论问题。如果我有一个未排序的任意集合c,并且我通过调用c.iterator() 两次获得了两个java.util.Iterators,那么两个迭代器是否必须以相同的顺序返回c 的元素?
我的意思是,实际上他们可能总是会这样做,但他们是否是通过合同强制这样做的?
谢谢, 一月
【问题讨论】:
标签: java api collections iterator contract
不,他们不是。
“没有关于元素的顺序的保证 返回(除非此集合是某个类的实例 提供保证)。”
请参阅Collection#iterator api contract。
这包括从一个迭代器到下一个迭代器(因为它没有说明需要这样做)。
还要考虑在获取这两个迭代器之间的基础集合中可能发生了一些变化!添加或删除的内容。
【讨论】:
There are no guarantees concerning the order in which the elements are returned 。但是正如 OP 询问 c.iterator() 是否被调用两次,那么两个迭代器的结果将是相同的顺序。
迭代器的实现由特定的 Collection 类提供。 List 的迭代器将给出有序元素,而 Set 不会
【讨论】:
因为大多数数据结构默认没有排序,所以不确定它们是否会以相同的顺序迭代。
如果您想要相同的顺序,您必须先对集合进行排序。
【讨论】: