Iterator是一个泛型接口,里面分别定义了四个方法
其中hashNext()和next()方法在集合中经常用到,其在ArrayList中的实现如下:
ArrayList中Iterator的实现类如下,类中定义的属性为:
private class Itr implements Iterator<E> {
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
Itr() {}
...
}
其中cursor相当于游标的概念,用于指定在List上的下一个元素,lastRet初始值为-1,用于指定返回某个元素。
ArrayList中的简化图如下:
public boolean hasNext() {
return cursor != size; //通过比较游标和size,判断下一个元素是否还存在
}
// 告诉编译器忽略指定类型的警告信息,前提是coder知道这个类型转换是安全的
@SuppressWarnings("unchecked")
public E next() {
checkForComodification(); // 检查该次对于迭代器的操作是安全的
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1; // 将cursor往后移一位
return (E) elementData[lastRet = i]; //返回的是lastRet对应的元素
}