是迭代器';Iterator和Listiterator的规则不同?(Java)

是迭代器';Iterator和Listiterator的规则不同?(Java),java,list,iterator,Java,List,Iterator,我正在练习Java代码-迭代器和列表迭代器 并且很难理解下面代码的结果 代码: import java.util.*; public class ListIteratorCollection { public static void main(String[] args) { List<String> list = Arrays.asList("A","B","C","D");

我正在练习Java代码-
迭代器
列表迭代器

并且很难理解下面代码的结果

代码

import java.util.*;

public class ListIteratorCollection {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A","B","C","D");
        list = new ArrayList<>(list);

        ListIterator<String> litr = list.listIterator();
        String str;

        while(litr.hasNext()){
            str = litr.next();
            System.out.print(str + '\t');
            if(str.equals("A"))
                litr.add("A-add");
        }
        System.out.println();

        while(litr.hasPrevious()){
            str = litr.previous();
            System.out.print(str + '\t');
            if(str.equals("C"))
                litr.add("C-add");
        }
        System.out.println();

        for(Iterator<String> itr = list.iterator(); itr.hasNext();)
            System.out.print(itr.next() + '\t');
        System.out.println();
    }
}
import java.util.*;
公共类ListIteratorCollection{
公共静态void main(字符串[]args){
列表=数组。asList(“A”、“B”、“C”、“D”);
列表=新的ArrayList(列表);
ListIterator litr=list.ListIterator();
字符串str;
while(litr.hasNext()){
str=litr.next();
System.out.print(str+'\t');
如果(str.equals(“A”))
litr.add(“A-add”);
}
System.out.println();
while(litr.hasPrevious()){
str=litr.previous();
System.out.print(str+'\t');
如果(str.equals(“C”))
litr.add(“C-add”);
}
System.out.println();
for(迭代器itr=list.Iterator();itr.hasNext();)
System.out.print(itr.next()+'\t');
System.out.println();
}
}
结果

import java.util.*;

public class ListIteratorCollection {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("A","B","C","D");
        list = new ArrayList<>(list);

        ListIterator<String> litr = list.listIterator();
        String str;

        while(litr.hasNext()){
            str = litr.next();
            System.out.print(str + '\t');
            if(str.equals("A"))
                litr.add("A-add");
        }
        System.out.println();

        while(litr.hasPrevious()){
            str = litr.previous();
            System.out.print(str + '\t');
            if(str.equals("C"))
                litr.add("C-add");
        }
        System.out.println();

        for(Iterator<String> itr = list.iterator(); itr.hasNext();)
            System.out.print(itr.next() + '\t');
        System.out.println();
    }
}
A B C D
D C C-添加B A-添加A
A-add B C-add C D

我想知道为什么不打印
A-add
(在第一个while循环中),而打印
C-add
(在第二个while循环中)。 它们都是新添加到现有列表中的,while循环结构是相似的(我想是吧?)


有人能解释一下吗?

以下文件对此进行了解释:

[…]新元素插入到隐式游标之前:对next的后续调用将不受影响,对previous的后续调用将返回新元素

因此,在您的示例中(
^
指示光标)

  • 第一次迭代(向前):
  • 第二次迭代(向后)
  • 第三次迭代(前进)
  • A A-add B C D
           ← ^
    
    // litr.add("C-add");
    A A-add B C-add C D
                 ← ^
    
     A A-add B C-add C D
    ^ →