public interface Iterator<E> {
/**
*是否还有下一个元素
*/
boolean hasNext();
/**
*下一个元素
*/
E next();
/**
* 从集合中删除最后一个返回的元素
*/
default void remove() {
throw new UnsupportedOperationException("remove");
}
/**
* 传入一个Consumer对剩余的每个元素执行指定的操作,直到所有元素已处理或操作引发异常
*/
default void forEachRemaining(Consumer<? super E> action) {
//requireNonNull 静态方法将会在参数为null时主动抛出NullPointerException 异常。
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
public interface ListIterator<E> extends Iterator<E> {
/**
* 是否有后继
*/
boolean hasNext();
/**
* 后继节点
*/
E next();
/**
* 是否有前驱
*/
boolean hasPrevious();
/**
* 前驱节点
*/
E previous();
/**
* 下一个节点的下标
*/
int nextIndex();
/**
* 前驱节点的下标
*/
int previousIndex();
/**
* 移除元素
*/
void remove();
/**
* 替换最后返回的元素
*/
void set(E e);
/**
* 插入一个结点到最后返回的元素之后
*/
void add(E e);
}
普通版 ArrayListdie迭代器
调用方法:list.iterator();
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
int cursor; // 当前下标
int lastRet = -1; // 最后一个元素的索引,没有返回1
int expectedModCount = modCount;//创建迭代器时列表被修改的次数,防止多线程操作。快速失败
/**
* 先检查一下是否列表已经被修改过
* 做一些简单的越界检查
* 返回元素,并且记录下返回元素的下标给lastRet,当前下标+1,
*/
public E