Iterator接口
API文档
首先Iterator的出现是为了替代Enumeration.
它和Enumeration不同的是,它可以删除迭代的内容。并且被更好的命名
这个接口只有四个方法:
boolean hasNext()
E next()
default void remove()
default void forEachRemaining(Consumer
源码分析
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
只有这一个方法给出了默认的实现。
简单的说就是判断下是否是Null。然后让动作接受每一个next。
当然因为remove是可选操作这里抛出了一个默认的异常。
Iterable
API文档:
这个类不同于上面的类,这个类只是为了让对象实现for-each loop声明而存在的。
这个类只有三个方法:
Iterator<T> iterator()
default Spliterator<T> spliterator()
default void forEach(Consumer<? super T> action)
第一个没什么好说的,生成迭代器。否则无法实现for-each
后两个是1.8版本之后更新的新方法。
foreach 提供另一个操作,对可迭代的元素的每一项运行一次。
前一个暂时还没看懂具体做什么的。