如何实现Java迭代器接口

  介绍

这篇文章主要讲解了如何实现Java迭代器接口,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

<强>迭代器接口

<强>源代码

包java.util;
  
  进口java.util.function.Consumer;/* *
  *迭代器遍历一个集合。{@code迭代器}需要的地方
  * {@link枚举}在Java集合框架。迭代器
  *不同于枚举在两个方面:
  *
  * & lt; ul>
  * & lt; li>迭代器允许调用者删除元素
  *基本迭代期间定义的集合
  *语义。
  * & lt; li>方法名称已得到改进。
  * & lt;/ul>
  *
  * & lt; p>该接口的一个成员
  * & lt; a href=https://www.yisu.com/zixun/technotes/guides/collections/index.html”rel="外部nofollow”>
  *  Java集合框架。
  *
  * @param 元素的类型返回的迭代器
  *
  * @author乔什布洛赫
  * @see集合
  * @see ListIterator
  * @see Iterable
  * @since 1.2
  */公共接口迭代器 {/* *
  *返回{@code真的}如果迭代有更多的元素。
  *(换句话说,返回{@code真的}如果{@link #下}
  *返回一个元素而不是抛出异常。)
  *
  * @return {@code真的}如果迭代有更多的元素
  */布尔hasNext ();/* *
  返回迭代的下一个元素。
  *
  * @return迭代的下一个元素
  * @throws NoSuchElementException,如果迭代没有更多的元素
  */E next ();/* *
  *删除从底层集合返回的最后一个元素
  *这个迭代器(可选操作)。这种方法可以调用
  *>包java.util;/* *
  *一个对象实现枚举接口的生成
  *一系列元素,>/* *
  *删除从底层收集这个迭代器返回的最后一个元素
  *(可选操作)。
  *移除当前迭代器上一次从基础集合中迭代的元素(可选操作)
  *
  *此方法可以被称为>私人类Itr实现Iterator{/* *
  *指数随后的调用返回的元素。
  */int光标=0;/* *
  *指数下或最近调用返回的元素
  *之前。重置为1如果这种元素被删除一个电话
  *删除。
  */int lastRet=1;/* *
  * modCount值,迭代器认为支持
  *应该列表。如果违反了这个期望,迭代器
  *已检测到并发修改。
  */int expectedModCount=modCount;
  
  公共布尔hasNext () {
  返回指针!=大小();
  }
  
  公共E next () {
  checkForComodification ();
  尝试{
  int i=光标;
  下=E (i);
  lastRet=我;//最近一次调用next()方法返回的元素的下标。
  光标=i + 1;//下一次调用next()方法返回的元素的下标。
  返回下一个;
  }捕捉(IndexOutOfBoundsException e) {
  checkForComodification ();
  把新NoSuchElementException ();
  }
  }
  
  公共空间remove () {
  如果(lastRet & lt;0)
  把新IllegalStateException();//所以,调用删除()前必须先调下()用
  checkForComodification ();
  
  尝试{
  AbstractList.this.remove (lastRet);
  如果(lastRet & lt;游标)
  光标,//因为移除了一个元素
  lastRet=1;//所以,不能连续调用两次删除()方法
  expectedModCount=modCount;
  }捕捉(IndexOutOfBoundsException e) {
  抛出ConcurrentModificationException ();
  }
  }
  
  最后的空白checkForComodification () {
  如果(modCount !=expectedModCount)
  抛出ConcurrentModificationException ();
  }
  }

看完上面的代码,我对modCount, expectedModCount变量以及checkForComodification()方法的作用比较好奇,所以尝试着去搞清楚。

先来看modeCount变量,这个变量被声明在内部类的外部:

如何实现Java迭代器接口