定义
Iterator是一个泛型接口,里面分别定义了四个方法
- boolean hasNext();
- E next();
- default void remove();
- default void forEachRemaining(Consumer<? super E> action);
其中hashNext()和next()方法在集合中经常用到,其在ArrayList中的实现如下:
实现
ArrayList中Iterator的实现类如下,类中定义的属性为:
private class Itr implements Iterator<E> {int cursor; // index of next element to returnint lastRet = -1; // index of last element returned; -1 if no suchint expectedModCount = modCount;Itr() {}...
}
其中cursor相当于游标的概念,用于指定在List上的下一个元素,lastRet初始值为-1,用于指定返回某个元素。
ArrayList中的简化图如下:
boolean hasNext()
public boolean hasNext() {return cursor != size; //通过比较游标和size,判断下一个元素是否还存在
}
default void remove()
// 告诉编译器忽略指定类型的警告信息,前提是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对应的元素}