ListIterator最后hasNext()有些不明白的东西

时间:2015-06-12 16:10:25

标签: java iterator listiterator

假设我运行此代码,它向我显示:1 10 2 10 3 10

public class Test1{
public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    list.add((1));
    list.add((2));
    list.add((3));
    ListIterator<Integer> it = list.listIterator();
    while(it.hasNext()){
        it.next();
        it.add((10));
    }
    for(Integer i : list){
        System.out.println(i);
    }        
}

我没有得到的是为什么最后的hasNext()发生了,即使我们应该在列表的末尾(在我的理解中)。在元素3上。

首先,迭代器在1. hasNext()返回true,因为 list 后面有2个。 所以我进入循环,it.next()返回1并将光标设置为2.当我添加10时,它发生在光标位置,因此介于1和2之间。 然后,it.next()返回2并将光标设置为3.然后我在2和3之间添加10。 但是在这一点上,我没有3的下一个,那么为什么hasNext()返回true,在列表的最后一位添加12?

2 个答案:

答案 0 :(得分:3)

创建Java中的迭代器以指向列表开头之前的位置,因此第一次调用next()会返回第一个元素(如果列表中有一个)。因此,您将遍历列表中的所有项目,并在每个项目之后添加10

答案 1 :(得分:2)

元素之间的光标始终是。当您通过列表迭代器添加元素时,该项目将添加到光标的位置,光标将移动到刚插入的项目之后。这也解释了in the javadoc

按顺序考虑光标位置:

R