Java LisIterator有add(),但没有';t迭代新添加的元素

Java LisIterator有add(),但没有';t迭代新添加的元素,java,list,listiterator,Java,List,Listiterator,我使用ListIterator在列表中进行迭代,因为如果满足某些条件,我希望在运行时添加一些元素 但是添加到列表中的新元素从未包含在迭代器中 import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Example { public static void main(String[] s) { List<Integer>

我使用ListIterator在列表中进行迭代,因为如果满足某些条件,我希望在运行时添加一些元素

但是添加到列表中的新元素从未包含在迭代器中

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Example {
    public static void main(String[] s)
    {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(5);
        list.add(6);

        ListIterator<Integer> listIterator = list.listIterator();
        while(listIterator.hasNext())
        {
            int i = listIterator.next();
            System.out.println("List Element: " + i + " | List size: " + list.size());
            if(i==1)
            {
                //Adding '3' to list
                listIterator.add(3);
                System.out.println("Added Element: 3");
            }
            if(i==2)
            {
                //Adding '4' to list
                listIterator.add(4);
                System.out.println("Added Element: 4");
            }
        }
    }
}
我需要利用当前listIterator中最近添加的元素,但无法做到这一点


是否有其他方法在同一迭代会话中迭代新元素?

当您在
列表迭代器上调用
add
时,它会将元素放在将由
next()
返回的元素之前:

从:

新元素插入到隐式游标之前:后续调用
next()
将不受影响,后续调用
previous()
将返回新元素

这个API设计背后的逻辑是游标是双向的。它没有指示您迭代它的方向,因此它的设计者需要决定两个方向中的哪一个,即
next()
previous()
,将包含新添加的元素,因此他们决定使用
previous()


如果希望光标在新添加的元素上进行迭代,请在插入后立即调用
previous()

我们可以使用
for
循环进行迭代,同时将元素添加到循环的末尾

for (int i = 0; i < list.size(); i++) {
    int element = list.get(i);
    if(element == 1){
        System.out.println(element);
        list.add(3);

    }
    else if(element == 2){
        System.out.println(element);
        list.add(4);
    }
    else
        System.out.println(element);
}
System.out.println(list);

您是否阅读了Javadoc中关于
add
在何处添加元素的内容?它们不应该包括在内。你为什么错误地认为他们应该这样做呢?我读了java文档,无法理解其中的解释。我还发布了我尝试过的代码片段。我不认为投票否决这个问题是必要的。此外,google或StackOverflow上也没有类似的问题或解释。在迭代过程中,有没有办法在列表的末尾添加新元素?@Rahusinghvi没有,没有任何方法。您可以添加到一个单独的列表中,然后在到达末尾时将其附加到主列表中。@dasblinkenlight在他的例子中,他可以添加到实际列表的末尾,然后使用以下命令重新分配指向原始迭代器当前位置的ListIterator:
myIter=myList.ListIterator(myIter.nextIndex())
for (int i = 0; i < list.size(); i++) {
    int element = list.get(i);
    if(element == 1){
        System.out.println(element);
        list.add(3);

    }
    else if(element == 2){
        System.out.println(element);
        list.add(4);
    }
    else
        System.out.println(element);
}
System.out.println(list);
1
2
5
6
3
4
[1, 2, 5, 6, 3, 4]