A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
   public E remove(int index) {//AbstractList方法
        throw new UnsupportedOperationException();
    }
private class Itr implements Iterator<E> {//内部类       
        int cursor = 0;
        int lastRet = -1;
        int expectedModCount = modCount;

        public boolean hasNext() {
            return cursor != size();
        }

        public E next() {
            checkForComodification();
            try {
                E next = get(cursor);
                lastRet = cursor++;
                return next;
            } catch (IndexOutOfBoundsException e) {
                checkForComodification();
                throw new NoSuchElementException();
            }
        }

        public void remove() {
            if (lastRet == -1)
                throw new IllegalStateException();
            checkForComodification();

            try {
                AbstractList.this.remove(lastRet);//调用AbstractList.remove()方法                if (lastRet < cursor)
                    cursor--;
                lastRet = -1;
                expectedModCount = modCount;
            } catch (IndexOutOfBoundsException e) {
                throw new ConcurrentModificationException();
            }
        }

        final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }
    }
    }
这是AbstractList抽象类里的一个源代码一部分,我想问一下Itr他这个内部类调用了remove方法,删除元素,但是AbstractList抽象类里的那个remove方法只是抛出一个异常,那它是怎么删除的呢??

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

1 个回复

倒序浏览
查API得知
  1. public abstract class AbstractList<E>extends AbstractCollection<E>implements List<E>此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用 AbstractSequentialList,而不是此类。

  2. 要实现不可修改的列表,编程人员只需扩展此类,并提供 get(int) 和 size() 方法的实现。

  3. 要实现可修改的列表,编程人员必须另外重写 set(int, E) 方法(否则将抛出 UnsupportedOperationException)。如果列表为可变大小,则编程人员必须另外重写 add(int, E) 和 remove(int) 方法。
复制代码
根据我的理解为:在这里指的是继承AbstractList(或许并覆盖实现remove方法)的外部类。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 嗯,子类实现的remove

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马