iterator与iterable的qubie
首先我们观察这两个单词他非常相似,但是当我从英语语法的角度去分析:
-iterable是一个形容词代表实现了该接口的对象是可迭代的
-iterator是一个名词是具体迭代的执行者又称迭代器
-他们之间存在包含于被包含的关系,如果一个对象是迭代器,那么这个对象肯定是可迭代的,但是反之则不同。
我们经常使用迭代器遍历list和for each循环遍历,我们知道迭代器遍历是通过 Iterator接口实现,而for each循环则是实现 Iterable接口,当我们打开源码发现它只返回了一个Iterator对象
iterable接口主要方法:
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
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());
}
}