文章目录
前言
本文章帮助大家对ListIterator
接口的理解。
一、概述
ListIterator
意为列表迭代器。顾名思义,它可对列表元素进行迭代遍历。若要自定义迭代方法,建议实现此接口。通常配合List
接口的实现类使用,在实现类中实现此接口(如内嵌类),供实现类listIterator
方法返回值使用。参考List
接口。
它继承于Iterator
接口,多了双向遍历、添加/设置元素、获取上/下一个元素索引下标等功能。参考Iterator
接口。
二、源码理解
包
package java.util;
import java.util.ListIterator;
使用ListIterator
接口时,需引入此包。
ListIterator接口
public interface ListIterator<E> extends Iterator<E> { /*...*/ }
使用接口时传入泛型E
,为可迭代对象的元素的类型。继承了Iterator
接口,获得其方法。
注意:迭代器的游标位置指向相邻两个元素之间,n个元素会有n+1个游标位置。
ListIterator方法
hasNext
boolean hasNext();
重写Iterator
接口的boolean hasNext()
方法,参考Iterator.hasNext
方法。
用来判断是否还有可正向遍历的元素。
next
E next();
重写Iterator
接口的E next()
方法,参考Iterator.next
方法。
用来遍历获取下一个(正向)元素。当hasNext()
返回false
时,next
方法将抛出NoSuchElementException
异常。
hasPrevious
boolean hasPrevious();
用来判断是否还有可反向遍历的元素。
previous
E previous();
用来遍历获取上一个(反向)元素。当hasPrevious()
返回false
时,previous
方法将抛出NoSuchElementException
异常。
nextIndex
int nextIndex();
返回下一个(正向)元素的下标,若到列表最后,已无下一个元素,返回值等于列表大小。
previousIndex
int previousIndex();
返回上一个(反向)元素的下标,若到列表最前,已无上一个元素,返回-1。
remove
void remove();
重写Iterator
接口的void remove()
方法,参考Iterator.remove
方法。
删除当前迭代器所指元素(可选),移除上个元素还是下个元素由实现类来规定。若实现类不支持remove
操作,则抛出UnsupportedOperationException
异常。
注意:通常在每次next()
或previous()
遍历后,且未调用过add
,最多可调用一次remove
,否则可能抛出IllegalStateException
异常。
set
void set(E e);
设置当前迭代器所指元素的值为e
(可选),设置上个元素还是下个元素由实现类来规定。
若实现类不支持set
操作,则抛出UnsupportedOperationException
异常;若因e
元素的类而不能设置,则抛出ClassCastException
异常;若因e
元素的某些方面而不能设置,则抛出IllegalArgumentException
异常。
注意:通常在每次next()
(或previous()
)遍历后,且未调用过remove
(或add
),可调用set
,否则可能抛出IllegalStateException
异常。
add
void add(E e);
插入元素e
到此列表中(可选)。插入的元素位于调用next()
返回元素(若有的话)之前,在调用previous()
返回元素(若有的话)之后。
若实现类不支持add
操作,则抛出UnsupportedOperationException
异常;若因e
元素的类而不能插入,则抛出ClassCastException
异常;若因e
元素的某些方面而不能插入,则抛出IllegalArgumentException
异常。
注意:此元素被插在“游标位置”之前,即刚插入元素后,使用previous()
返回新元素,使用next()
还是返回下一个元素。此调用会使nextIndex
、previousIndex
返回值比原本增加1。
总结
新人源码理解,望大家多多指点。