在这里插入图片描述

啥也别说先欣赏一下"美图"。

从上图中我们会发现Iterator是大集合的祖宗,那我们就先看一下<mark>Iterator</mark>吧。

  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关键字

  1. hasNext:如果迭代具有更多元素,·hasNext在操作下一个元素之前会进行判断是否存在下一个元素,存在则返回true,反之false,通常用于指示迭代是否完成。
  2. 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的操作。

<mark>Iterator迭代器 通常 由具有 “迭代能力” 的类(即实现了Iterable接口)调用 iterator()方法得到。</mark>