代码之家  ›  专栏  ›  技术社区  ›  Mohamed Saligh

迭代器对它的对象状态有什么副作用吗?

  •  0
  • Mohamed Saligh  · 技术社区  · 14 年前

    从技术上讲,每当我们改变一个对象的指针(平均索引位置)时,它会影响对象状态吗?那么如何才能安全地实现呢?


    更新时间:

    //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 回复  |  直到 14 年前
        1
  •  4
  •   Jon Skeet    14 年前

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

    想象一个项目的物理列表,几个人在上面迭代。每个人都可以把手指指向他们在列表中的位置。当它们迭代时,它们的手指会移动(改变状态),但列表本身不会改变。

    编辑:如注释、迭代器中所述 可以 支持 remove() 如果支持,将影响基础集合的操作。