为什么可以通过迭代器将项目添加到集合中?

我正在阅读 AbstractList 的代码,其中有一个嵌套类 Itr,这很好。让我困惑的是为什么Java为其Iterator提供了一组方法,以便可以使用它来修改底层集合,例如add(),,,remove()。set()


必须将集合暴露给迭代器的根本原因是什么?它比通过 Collection 的方法修改集合更方便吗?


private class Itr implements Iterator<E> {


    //......bha


    public void remove() {

        if (lastRet < 0)

            throw new IllegalStateException();

        checkForComodification();


        try {

            AbstractList.this.remove(lastRet);

            if (lastRet < cursor)

                cursor--;

            lastRet = -1;

            expectedModCount = modCount;

        } catch (IndexOutOfBoundsException e) {

            throw new ConcurrentModificationException();

        }

    }

}


  private class ListItr extends Itr implements ListIterator<E> {

    ListItr(int index) {

        cursor = index;

    }

    public void set(E e) ///...

   public void add(E e) //.....


慕莱坞森
浏览 84回答 1
1回答

开心每一天1111

如果在迭代时直接ConcurrentModificationException修改集合,则很可能会得到 a ,因为迭代器可能会变得无效。但如果你通过迭代器来完成,那么迭代器的实现可以确保它(迭代器)在修改后仍然有效。但是,如果迭代器代码不知道修改,则它无法执行此操作,这就是您通过迭代器而不是直接执行此操作的原因。虽然可以设计集合和迭代器,直接修改集合将确保它使所有迭代器保持最新,但它要复杂得多,而且 JDK 设计者并没有走这条路。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java