1
  • 迭代器是一种模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部
  • 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()来定位的。

老污的猫
30 声望5 粉丝