ListIterator接口定义如下:
Interface ListIterator<E>{}
包含的方法有:
由以上定义我们可以推出ListIterator可以:
(1)双向移动(向前/向后遍历).
(2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
(3)可以使用set()方法替换它访问过的最后一个元素.
(4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.
import java.util.ArrayList;
import java.util.ListIterator;
public class Encap {
public static void main(String args[]){
ArrayList<String> name = new ArrayList<>();//新建一个ArrayList,命名为name
name.add("Mark");
name.add("Susan");
name.add("Lisa");
name.add("Andy");
System.out.println("Before iterator :" + name);//输出ArrayList中的值
ListIterator<String> it = name.listIterator();//调用了name的listIterator方法,并使ListIterator类型的it指向,也就是说ListIterator类型的it指向
//了ArrayList容器,通过调用ArrayList的listIterator方法来进行容器内的遍历
while(it.hasNext()){//判断容器中是否还有元素,如果有,则输出元素,当前元素前一个元素的索引,当前元素后一个元素的索引
System.out.println(it.next() + "," + it.previousIndex() + "," + it.nextIndex());
}
while(it.hasPrevious()){//此时指针已经到了最后一个元素,判断指针前是否有元素,若有,则往前遍历
System.out.print(it.previous() + " ");
}//循环结束时,指针又回到第一个元素
System.out.println();//输出换行
it = name.listIterator(1);//调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator,it指向了listIteror的第二个元素Susan
while(it.hasNext()){//判断是否还有元素
String t = it.next();//下一个元素(第一次为Susan)赋值给t
System.out.println("Now iterator :" + t);//输出Susan
if("Lisa".equals(t)){
it.set ("Silly");//如果下一个元素等于Lisa,则置为Silly
}else{
it.set( "Liu");//如果下一个元素不等于Lisa,则置为Liu
}
}
System.out.println("After iterator :" + name);//最后输出ArrayList里的元素
}
}
运行结果:
Before iterator :[Mark, Susan, Lisa, Andy]
Mark,0,1
Susan,1,2
Lisa,2,3
Andy,3,4
Andy Lisa Susan Mark
Now iterator :Susan
Now iterator :Lisa
Now iterator :Andy
After iterator :[Mark, Liu, Silly, Liu]