前言
本文章帮助大家对Iterator
接口的理解。
一、概述
Iterator
意为迭代器。顾名思义,它可对集合元素进行迭代遍历。若要自定义迭代方法,建议实现此接口。通常配合Iterable
接口的实现类使用,在实现类中实现此接口(如内嵌类),供实现类iterator
方法返回值使用。参考Iterable
接口。
它与Enumeration
接口(枚举)不尽相同,多了一个remove
方法以删除元素。Enumeration
接口可通过asIterator
返回(转化为)对应Iterator
。参考Enumeration
接口。
二、源码理解
包
package java.util;
import java.util.Iterator;
使用Iterator
接口时,需引入此包。
Iterator接口
public interface Iterator<E> { /*...*/ }
使用接口时传入泛型E
,为可迭代对象的元素的类型。
Iterator方法
hasNext
boolean hasNext();
重点:用来判断是否还有可遍历的元素。通常可以这样使用:
// iter为某集合对象的迭代器
while (iter.hasNext()) {
Object next = iter.next();
}
next
E next();
重点:用来遍历获取下一个元素。当hasNext()
返回false
时,next
方法将抛出NoSuchElementException
异常。
remove
default void remove() { throw new UnsupportedOperationException("remove"); }
删除当前迭代器所指元素。default
关键字给出默认实现,仅抛出UnsupportedOperationException
异常,不做其它处理。
注意:通常在每次next()
遍历后,最多可调用一次remove
,否则可能抛出IllegalStateException
异常。
forEachRemaining
default void forEachRemaining(Consumer<? super E> action) { /*...*/ }
遍历所有剩余(还未遍历过)元素,对其调用action
。参考Consumer
接口。default
关键字给出默认实现。
总结
新人源码理解,望大家多多指点。