迭代器
-
迭代器(也是一种设计模式)是一个对象,他的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构,此外迭代器通常被称为轻量级对象,创建他的代价小。
-
在java中有两个熟悉的迭代器Iterator和ListIterator
Iterator
- 源码
public interface Iterator<E> {
// 检查序列中是否还有下一个元素
boolean hasNext();
// 获取序列中的下一个元素
E next();
// 将迭代器新近返回的元素删除
default void remove() {
throw new UnsupportedOperationException("remove");
}
//
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
- 只能单向移动
ListIterator
- 源码
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);
}
- ListIterator是一个更加强大的Iterator的子类,他只能用于访问各种List类
- ListIterator可以双向移动
- 还可以产生相对迭代器在列表中指向的当前位置的前一个和后一个元素的索引
- 可以使用set方法替换他访问过的最后一个元素