乐趣区

iterator-for

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