/**
* @Classname ListIterator:Iterator的一个重要子接口,增加了6个方法
* @see:为需要双向遍历数据时准备的,在后续ArrayList和LinkedList分析时会用到
* @see:在遍历时修改List的元素
* @see:在遍历时获取迭代器当前游标所在位置,注意长度为N的集合会有N+1个游标的位置,第一个元素位置为0,第一个游标位置为-1,在第一个元素前
* @date 2021年7月5日 下午3:00:14
* @Version 1.0
*/
public interface ListIterator<E> extends Iterator<E> {
// 是否还有下一个元素
boolean hasNext();
// 返回游标后面的元素,同时游标前后一位,没有元素就报异常
E next();
// 判断游标前面是否有元素
E hasPrevious();
// 返回游标前面的元素,同时游标前移一位,没有元素就报异常
E previous();
// 返回游标后边元素的索引位置,初始为0,遍历N个元素结束时为N
int nextIndex();
// 返回游标前面元素的位置,初始时为-1,同时会报异常
int previousIndex();
// 删除迭代器最后一次操作的元素,直接调用时会报异常
void remove();
// 在游标前面插入一个元素
void add(E e);
// 更新最后一次调用next()或者previous()的元素,直接调用时会报异常
void set(E e);
}
/**
* ListIterator有两种获取方式:
* List.listIterator()
* List.listIterator(int location) 可以指定游标的所在位置
* AbstractList作为List的直接子类,里面实现了listIterator()方法,且包含了了两个内部迭代器实现类:
* ListIterator<E> listIterator()
* ListIterator<E> listIterator(int location) 该方法返回的时FullListIterator(location)
* class FullListIterator 该内部类继承了SimpleListIterator内部类
* class SimpleListIterator 该内部类实现了Iterator接口,其主要操作如删除、添加等最后都交给了子类来实现,List
* 的子类ArrayList\LinkedList\vector,由于底层实现原理不同(数组,双向链表),具体操作类实现有所不同
*/
集合类源码之迭代器ListIterator
最新推荐文章于 2022-11-02 17:22:17 发布