import java.util.Objects;
import java.util.Spliterators;
import java.util.function.Consumer;
/**
* @Classname Iterable:所有集合类实现了Collection接口,而Collection继承了Iterable接口
*/
public interface Iterable<T> {
/**
* @note:为什么集合类一定要实现Iterable接口,但并不直接实现Iterator接口?避免集合在不同方法间传递时,由于next()
* 方法导致迭代位置的变化,除非再为Iterator接口添加一个reset()重置方法。而Iterable则每次调用时都会返回一个从头开始
* 计数的迭代位置。实现Iterable的类可以实现多个Iterator内部类,如前序、中序、后序、随机
*/
Iterator<T> iterator();
/**
* @implNote:实现foreach功能,只需实现Iterable接口,然后就可以像集合那样通过Iterator iterator = strings.iterator()方式,或使用foreach进行遍历
*/
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);
}
}
集合类源代码之迭代器Iterable
最新推荐文章于 2024-05-16 10:23:10 发布