谈谈Java中的Iterator

摘要

  1. Iterator的作用?
  2. IteratorEnumeration的区别?
  3. IteratorListIterator的区别?
  4. Iteratorforeach的关联?

Iterator的作用

Iterator,中文译作迭代器,是一种检查容器内元素并遍历元素的数据类型。它能使使用者不必关心遍历元素的过程,统一了对元素的访问方式。

在JDK1.8中,Iterator接口包含下面这些方法:

//是否有下个元素
boolean hasNext();
//获取下个元素
E next();
//移除迭代器当前指向的元素,这个功能不强制实现,可以抛出UnsupportedOperationException异常
void remove();
//每个元素作为参数传递给Consumer接口的accept
void forEachRemaining(Consumer<? super E> action);

Iterator和Enumeration的区别

Iterator是JDK1.2后才出现的接口,目的是为了取代Enumeration。

Enumeration的作用和Iterator相似,它包含下面的方法:

//是否存在更多元素
boolean hasMoreElements();
//获取下一个元素
E nextElement();

Iterator:

  • 简化了方法名称
  • 增加了移除元素的操作

Iterator和ListIterator的区别

List接口中有一个方法listIterator()用于返回一个List迭代器,ArrayList在内部类中实现了这个迭代器,调用listIterator()时通过构造方法构造出一个ListIterator对象并返回。

那么Iterator和ListIterator有什么区别呢?

ListIterator是Iterator的扩充

ListIterator接口中除了继承自Iterator中的方法,还有:

//是否有上一个元素
boolean hasPrevious();
//获取上一个元素
E previous();
//下一个元素的index
int nextIndex();
//上一个元素的index
int previousIndex();
//用一个元素替换当前指向的元素
void set(E e);
//在当前位置插入一个元素
void add(E e);

Iteratorforeach的关联?

foreach只支持数组或实现了Iterable接口的类。

Iterable接口强制要求实现iterator()方法,也就是说,foreach语句底层还是通过iterator的遍历实现的。

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/%e8%b0%88%e8%b0%88java%e4%b8%ad%e7%9a%84iterator/