- 迭代器是一种模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部
-
Iterable 实现这个接口的集合对象支持迭代,是可以迭代的。实现了这个可以配合foreach使用。
-
Iterator 迭代器,提供迭代机制的对象,具体如何迭代是这个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());
}
}
Iterator & 泛型
- Iterator对集合类中的任何一个实现类,都可以返回这样一个Iterator对象。可以适用于任何一个类。
- 集合类元素类型是不确定的,从集合中取出时都是Object类型,使用时需要进行强制转化,最好配合泛型,就可以直接使用而不用显示类型转换。
Iterator & forEach
- forEach用来处理集合中的每个元素而不用考虑集合下标,但是删除的时候(remove),forEach中调用集合remove会导致原集合变化导致错误,遍历并remove操作应该用Iterator的remove方法。
效率对比
- 从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素。而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。