/*
执行结果为什么是:
hello
world
java
**************************************
study
java
study
world
study
hello作者: HM赵磊 时间: 2013-3-20 18:57 本帖最后由 HM赵磊 于 2013-3-20 19:09 编辑
两点说:
一、List集合有遍历集合的迭代器有两个:Iterator ListIterator,但是由于Iterator有她的局限性,即Iterator迭代器没有添加删除结合中元素的方法,如果使用集合对象在迭代的过程中添加或者删除,将会出现异常,所以这个时候ListIterator迭代器就应用而生了,ListIterator可以在迭代的过程中,可以对集合中的元素进行添加和删除。
二、对于ListIterator中的add方法。
是将指定的元素插入到列表中,插入的位置是next返回的下一个元素的前面(如果next下一个元素存在的话),在他插入之后,不影响对next的后续调用,所以你在第一次迭代的时候并且添加元素,但是遍历出来的结果是hello world java 而第二次迭代时的结果是 study hello study world study java 。
另:下面的内容是来自JAVA API 文档 中的ListIterator 中 add方法的介绍。
void add(E e)
将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);如果列表没有元素,那么新元素就成为列表中的唯一元素。新元素被插入到隐式光标前:不影响对 next 的后续调用,并且对 previous 的后续调用会返回此新元素(此调用把调用 nextIndex 或 previousIndex 所返回的值增加 1)。 作者: 刘辉 时间: 2013-3-20 20:18
请看下面注释
import java.util.*;
class Day17Test3
{
public static void main(String[] args)
{
List list=new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
//列表迭代器
ListIterator lit=list.listIterator();
while(lit.hasNext())
{
System.out.println(lit.next());
lit.add("study");//这里每次你顺序迭代的时候都循环一次就添加了一个study,所以添加的结果就变成了hello study world study java
} //study 当你逆向迭代的时候当然输出的就是下面的内容了