Iterator
和 ListIterator
都是 Java 集合框架中用于遍历集合元素的接口,但它们有一些区别:
使用的范围:Iterator可以迭代所有集合
,而ListIterator 只能用于List及其子类
。
继承关系:ListIterator 继承 Iterator
,并且ListIterator包含的方法更多
遍历的方向:Iterator 接口只能向前遍历集合元素
,而 ListIterator 接口可以双向遍历
,即向前或向后遍历集合元素。
遍历的能力:Iterator 接口只能遍历集合
,而 ListIterator 接口除了遍历集合元素外,还可以修改集合中的元素
,添加新的元素,以及获取当前遍历位置的索引。
遍历的起点:Iterator 接口的遍历起点是集合的开头
,而 ListIterator 接口可以通过 hasPrevious()
和 previous()
方法从集合的末尾开始遍历。
遍历的性能:Iterator 接口的遍历性能通常比 ListIterator 接口更好
,因为 ListIterator 接口需要维护额外的指针和索引信息。
示例如下所示:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;public class Test{public static void main(String[] args) {ArrayList<String> arrayList=new ArrayList<>();arrayList.add("张三");arrayList.add("李四");arrayList.add("王五");Iterator<String> iterator=arrayList.iterator();System.out.println("iterator遍历的结果为:");while(iterator.hasNext()){String element=iterator.next();System.out.print(element+" ");System.out.println();}ListIterator<String> listIterator=arrayList.listIterator();System.out.println("listIterator正向遍历的结果为:");while(listIterator.hasNext()){String element=listIterator.next();if(element.equals("王五")){//在遍历过程中,修改集合中的元素listIterator.set("Lisa");}System.out.println(element+" ");}ListIterator<String> listIterator2=arrayList.listIterator();System.out.println("listIterator修改后正向遍历的结果为:");while(listIterator2.hasNext()){String element=listIterator2.next();System.out.println(element+" ");}System.out.println("listIterator修改后反向遍历的结果为:");while(listIterator.hasPrevious()){String element=listIterator.previous();System.out.println(element+" ");}}
}
输出如下所示:
iterator遍历的结果为:
张三
李四
王五
listIterator正向遍历的结果为:
张三
李四
王五
listIterator修改后正向遍历的结果为:
张三
李四
Lisa
listIterator修改后反向遍历的结果为:
Lisa
李四
张三