为什么listiterator中的hasPrevious()和add()的组合进入无限循环,而hasNext()和add()却没有?

问题描述 投票:0回答:1

具有两个元素的ArrayList

     ArrayList<String> a = new ArrayList<String>() { 
        {
            add("hai");
            add("hello");
        }
    };

为该列表创建了一个列表迭代器

   ListIterator l = a.listIterator();

使用next遍历并在列表中添加元素“ bye”

   while (l.hasNext()) {              

        l.next();
        l.add("bye");

    }
    System.out.println(a);

以上代码的输出为 = [hai,bye,hello,bye]

遍历列表的最后一个>>

    while(l.hasNext()) {             
        l.next();
    }

使用prev向前遍历并将元素“ bye”添加到列表中

    while (l.hasPrevious()) {         

        l.previous();
        l.add("bye");

    }
    System.out.println(a);

进入无限,什么都不打印!

具有两个元素的ArrayList ArrayList a = new ArrayList (){{add(“ hai”); add(“ hello”); };为...

java collections iterator
1个回答
0
投票

好吧,ListIteratoradd的Javadoc解释了:

将指定的元素插入列表(可选操作)。该元素将紧接在next将返回的元素之前(如果有的话)插入,并且在next被返回的元素之前插入(如果有的话)。 (如果列表不包含任何元素,则新元素将成为列表上的唯一元素。)新元素将插入到隐式光标之前:对next的后续调用将不受影响,并且对Previous的后续调用将返回新元素

© www.soinside.com 2019 - 2024. All rights reserved.