1.我们先看下ArrayList中iterator方法的实现
public Iterator<E> iterator() {
return new Itr();
}
新建一个Iterator对象,Iterator是一个成员内部类,实现了Iterator接口,声明为:
private class Itr implements Iterator<E>
它有三个实例成员变量:
int cursor; //下一个要返回的元素位置
int lastRet = -1; //最后一个返回的索引位置,如果没有则为-1
int expectedModCount = modCount;
cursor表示下一个要返回的元素位置,lasRet表示最后一个返回的索引位置,expectedModCount 表示期望的修改次数,初始化为外部类当前的修改次数modCount,回顾一下,成员内部类可以直接访问外部类的实例变量。每次发生结构性变化的时候modCount都会增加,而每次迭代器操作的时候都会检查expectedModCount是否与modCount相同,这样就能检测出结构性变化。
我们先从hasNext(),代码如下:
public boolean hasNext() {
return cursor != size;
}
cursor与size比较,nex方法如下