gpt4 book ai didi

java - Iterator和Listiterator的迭代器规则有什么不同吗?(Java)

转载 作者:行者123 更新时间:2023-12-02 02:40:42 27 4
gpt4 key购买 nike

我正在练习 Java 代码 - iteratorlistIterator
并且很难理解下面代码的结果。

代码:

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-add B A-add A
A A-add B C-add C D

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

谁能解释一下吗?

最佳答案

ListIterator.add 的文档对此进行了解释:

[...] The new element is inserted before the implicit cursor: a subsequent call to next would be unaffected, and a subsequent call to previous would return the new element.

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

  1. 第一次迭代(向前):
    A B C D
    ^ →

    // litr.add("A-add");
    A A-add B C D
    ^ →
  2. 第二次迭代(向后)
    A A-add B C D
    ← ^

    // litr.add("C-add");
    A A-add B C-add C D
    ← ^
  3. 第三次迭代(向前)
     A A-add B C-add C D
    ^ →

关于java - Iterator和Listiterator的迭代器规则有什么不同吗?(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63689819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com