Iterator简介 LinkedList使用迭代器优化移除批量元素原理

public interface Iterator<E> {
   
    /**
     *是否还有下一个元素
     */
    boolean hasNext();
    /**
     *下一个元素
     */
    E next();
    /**
     * 从集合中删除最后一个返回的元素
     */
    default void remove() {
   
        throw new UnsupportedOperationException("remove");
    }
    /**
     * 传入一个Consumer对剩余的每个元素执行指定的操作,直到所有元素已处理或操作引发异常
     */
    default void forEachRemaining(Consumer<? super E> action) {
   
        //requireNonNull 静态方法将会在参数为null时主动抛出NullPointerException 异常。
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}
public interface ListIterator<E> extends Iterator<E> {
   
    
    /**
     * 是否有后继
     */
    boolean hasNext();
    /**
     * 后继节点
     */
    E next();

    /**
     * 是否有前驱
     */
    boolean hasPrevious();

    /**
     * 前驱节点
     */
    E previous();

    /**
     * 下一个节点的下标
     */
    int nextIndex();

    /**
     * 前驱节点的下标
     */
    int previousIndex();

    /**
     * 移除元素
     */
    void remove();

    /**
     * 替换最后返回的元素
     */
    void set(E e);

    /**
     * 插入一个结点到最后返回的元素之后
     */
    void add(E e);
}

普通版 ArrayListdie迭代器

调用方法:list.iterator();

public Iterator<E> iterator() {
   
        return new Itr();
    }
    private class Itr implements Iterator<E> {
   
        int cursor;       // 当前下标
        int lastRet = -1; // 最后一个元素的索引,没有返回1
        int expectedModCount = modCount;//创建迭代器时列表被修改的次数,防止多线程操作。快速失败
        /**
        * 先检查一下是否列表已经被修改过
        * 做一些简单的越界检查
        * 返回元素,并且记录下返回元素的下标给lastRet,当前下标+1,
        */
        public E 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值