介绍
这篇文章主要讲解了如何实现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迭代器接口