从技术上讲,每当我们更改对象的指针(平均索引位置)时,它是否会影响对象状态?那它怎么能安全地实现呢?
更新
//Java:
public static Collection reverse(Collection collection) {
LinkedList newCollection = new LinkedList();
Iterator i = collection.iterator();
while(i.hasNext()) {
newCollection.addFirst(i.next());
}
return newCollection;
}
考虑一段代码,在调用函数addFirst(i.next())
时,对象i
的状态是否会在内部发生变化?
答案 0 :(得分:4)
它会影响迭代器的状态(否则它永远不会改变它返回的值),但它通常不会影响它迭代的集合的状态。 (在某些情况下,数据只能迭代一次,当然 - 想象一下来自服务器的值流。)
想象一下物品的物理元素,并且有几个人在迭代它。每个人都可以指着他们在列表中的位置。当他们迭代时,他们的手指会移动(变异状态),但列表本身不会改变。
编辑:正如评论中所述,迭代器可能支持remove()
操作,如果支持它将影响底层集合。