这更多的是一个理论问题。如果我有没有顺序的任意集合c
,我通过调用c.iterator()
获得两个java.util.Iterator
小号两次,一举两得迭代器必须以相同的顺序返回的c
元素?两个java.util.Iterator到同一个集合:它们是否必须以相同的顺序返回元素?
我的意思是,在实践中,他们可能永远会,但他们被迫按合同约定这样做呢?
感谢, 扬
这更多的是一个理论问题。如果我有没有顺序的任意集合c
,我通过调用c.iterator()
获得两个java.util.Iterator
小号两次,一举两得迭代器必须以相同的顺序返回的c
元素?两个java.util.Iterator到同一个集合:它们是否必须以相同的顺序返回元素?
我的意思是,在实践中,他们可能永远会,但他们被迫按合同约定这样做呢?
感谢, 扬
不,他们不是。
“有关于它的元素是 返回(除非该集合是一些类 提供担保的实例)的顺序没有保证。”
查看Collection#iterator api contract。
这包括从一个迭代到下一个(因为它并没有说明要求什么)。
还要考虑的东西可以在底层集合在获得这两个迭代器之间已经改变了!添加或删除了某些东西。
迭代器的实现由特定的Collection类提供。迭代器列表会给有序的元素,同时设置不会
虽然这不是问题。 –
嗯......如果订单比不管你有多少时间打电话你会得到相同的顺序中的元素(如表的情况下),同时在集合的情况下,如果你把它放在这不会是情况 –
确定不够公平存在保证像那样。 –
由于大多数数据结构在默认情况下不下令所以现在还不能确定,他们将在同一顺序迭代。
如果你想要相同的订单,你必须先排序收集。
'没有关于元素返回顺序的保证。但是,如果OP询问c.iterator()是否被调用了两次,那么这两个迭代器的结果将是相同的顺序。 –
这也是在我的答案中解决的。 –
+1。只有Jon Skeet可以说更好。 –