返回迭代器的函数
1. public ListIterator<E> listIterator(int index)
2. public ListIterator<E> listIterator()
3. public Iteraotr<E> iterator()
前两个函数返回针对ArrayList的迭代器,而第三个函数返回一个迭代器的基类对象。
迭代器的基类 private class Itr implements Iterator<E>
定义迭代器的基本操作:hasNext(), next(), remove(), forEachRemaining()
核心的成员变量:cursor : 下一个要返回的元素坐标
lastRet: 上一个已经返回的元素坐标,没有时(默认)值为-1
定义更多操作的继承类 private class ListItr extends Itr implements ListIterator<E>
只提供一个有参构造函数,在基类的基础上,提供了更多的操作:hasPrevious(), nextIndex(), previousIndex(), previous(), set(E e), add(E e), subList(int fromIndex, int toIndex)
因为ArrayList的底层容器就是数组,所以迭代器的核心就是两个int型的变量: cursor, lastRet.
迭代器的操作都是对两个变量的操作,remove函数比较特殊,调用ArrayList的remove函数执行完操作以后,cursor=lastRet, lastRet=-1, 设置不存在上一个返回的元素坐标
在看代码的过程还碰到了<? super T> 含义: 包含T在内的所有的父类
还有一个类似的形式<? extends T> : 包含T在内的所有的子类