JDK1.8源码解读之 Iterator

224 阅读1分钟

前言

  • 集合上的迭代器。在Java Collections Framework中,{@code Iterator}代替了{@link Enumeration}。迭代器与枚举有以下两种不同:
  • 1, 迭代器允许调用者在迭代期间使用定义明确的语义从基础集合中删除元素。
  • 2, 方法名称已得到改进。
  • 接口属于java集合框架中的一员。

源码


package java.util;
import java.util.function.Consumer;

 */
public interface Iterator<E> {
    /**
     * 如果迭代中包含更多元素,则返回{@code true}。 (换句话说,如果{@link #next}将返回一个元素而不是引发异常,则返回{@code true}。)
     *
     */
    boolean hasNext();

    /**
     * 返回迭代中的下一个元素。
     */
    E next();

    /**
     * 从基础集合中移除此迭代器返回的最后一个元素(可选操作)。
     * 每次调用{@link #next}时,只能调用一次此方法。
     * 如果在迭代进行过程中以其他方式(而不是通过调用此方法)修改了基础集合,则迭代器的行为不可预期。
     */
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    /**
     * 对剩余的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。
     * 如果指定了顺序,则按照迭代顺序执行操作。该操作引发的异常将传送到调用者。
     */
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}