ListIterator是一个功能更加强大的Iterator的子类型,其定义为:
public interface ListIterator<E> extends Iterator<E>
ListIterator的强大之处在于其可以双向移动,还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,还可以使用set()方法替换它访问过的最后一个元素。不过ListIterator只能用于对各种List类的访问,可以通过调用List对象的listIterator()方法产生一个指向List开始索引处的ListIterator,还可以调用listIterator(int)方法产生一个指向List指定索引处的ListIterator。下面的例子演示一下这些能力:
import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class ListIteratorDemo {public static void main(String[] args) {List<String> lists = new ArrayList<String>();lists.add("1A");lists.add("2B");lists.add("3C");lists.add("4D");lists.add("5F");lists.add("6F");lists.add("7G");ListIterator<String> iterator = lists.listIterator();System.out.println("-----------");//向后遍历while(iterator.hasNext()){System.out.print(iterator.next()+" ");}System.out.println();System.out.println("-----------");//此时游标已经指向迭代器的尾部,可以向前遍历while(iterator.hasPrevious()){System.out.print(iterator.previous()+" ");}System.out.println();System.out.println("-----------");//从指定位置向前遍历iterator = lists.listIterator(2);while(iterator.hasPrevious()){System.out.print(iterator.previous()+" ");}System.out.println();System.out.println("-----------");iterator = lists.listIterator();//替换元素while(iterator.hasNext()){String str = iterator.next();iterator.set("H:"+str);}while(iterator.hasPrevious()){System.out.print(iterator.previous()+" ");}}}结果为:-----------1A 2B 3C 4D 5F 6F 7G-----------7G 6F 5F 4D 3C 2B 1A-----------2B 1A-----------H:7G H:6F H:5F H:4D H:3C H:2B H:1A