迭代器是否会对其对象状态产生任何副作用?

时间:2010-11-22 10:23:48

标签: java iterator

从技术上讲,每当我们更改对象的指针(平均索引位置)时,它是否会影响对象状态?那它怎么能安全地实现呢?


更新

//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的状态是否会在内部发生变化?

1 个答案:

答案 0 :(得分:4)

它会影响迭代器的状态(否则它永远不会改变它返回的值),但它通常不会影响它迭代的集合的状态。 (在某些情况下,数据只能迭代一次,当然 - 想象一下来自服务器的值流。)

想象一下物品的物理元素,并且有几个人在迭代它。每个人都可以指着他们在列表中的位置。当他们迭代时,他们的手指会移动(变异状态),但列表本身不会改变。

编辑:正如评论中所述,迭代器可能支持remove()操作,如果支持它将影响底层集合。