共计 766 个字符,预计需要花费 2 分钟才能阅读完成。
- 迭代器是一种模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象, 使用迭代器就可以遍历这个对象的内部
- 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() 来定位的。
正文完