为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2023-09-27 21:23:53
我正在阅读 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) //.....
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

如果在迭代时直接ConcurrentModificationException修改集合,则很可能会得到 a ,因为迭代器可能会变得无效。但如果你通过迭代器来完成,那么迭代器的实现可以确保它(迭代器)在修改后仍然有效。

但是,如果迭代器代码不知道修改,则它无法执行此操作,这就是您通过迭代器而不是直接执行此操作的原因。

虽然可以设计集合和迭代器,直接修改集合将确保它使所有迭代器保持最新,但它要复杂得多,而且 JDK 设计者并没有走这条路


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信