啥也别说先欣赏一下"美图"。
从上图中我们会发现Iterator是大集合的祖宗,那我们就先看一下Iterator吧。
public interface Iterator<E>
Iterator是一个接口,中文名叫迭代器。定义的功能是对各种数据集合的迭代。我们来逐步分析它。其内部方法:
1.boolean hasNext();
2.E next();
3.default void remove() {
throw new UnsupportedOperationException("remove");
}
4. default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
我们会发现在接口中尽然会有方法体,这就是JAVA8的新特性:default关键字,想了解更多关于default关键字的知识,可以看这篇文章学习:详细分析Java8中default关键字
hasNext:
如果迭代具有更多元素,·hasNext
在操作下一个元素之前会进行判断是否存在下一个元素,存在则返回true
,反之false
,通常用于指示迭代是否完成。next
用于返回当前迭代位置的下一个迭代元素。但是,如果到达了集合的末尾,next
方法将抛出一个NoSuchElementException
。
在实际中的应用如下:
//定义一个集合
Collection<String> c = ...;
//请求一个迭代器
Iterator iter=c.iterator();
//判断是否存在下一个元素
while(iter.hashNext){
//获取当前元素
String str = iter.next();
}
3.remove
将会删除上次调用next方法时返回的元素。在大多数情况下,在决定删除某个元素之前应该先看一下这个元素是否具有实际意义,更重要的是,对next
方法和remove
方法的调用具有相互依赖性,如果调用remove
之前没有调用next
将是不合法的。如果这样做,将会抛出一个IllegalStateException
异常。
4.forEachRemaining
用于支持lambda的操作。
Iterator迭代器 通常 由具有 “迭代能力” 的类(即实现了Iterable接口)调用 iterator()方法得到。