如何解决Java的Iterator和Listiterator的迭代器规则是否彼此不同?
我正在练习Java代码-iterator
和listIterator
并且很难理解下面的代码的结果。
代码:
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 A加B C加C D
我想知道为什么A-add
没有打印(在第一个while循环中),而C-add
却打印了(在第二个while循环中)。
这两个都只是新添加到现有列表中,而while循环结构是相似的(我认为呢?)。
有人可以解释吗?
解决方法
ListIterator.add
的文档对此进行了解释:
[...]新元素插入到隐式光标之前:对next的后续调用将不受影响,而对previous的后续调用将返回新元素。
因此在您的示例中(^
表示光标)
- 第一次迭代(向前):
A B C D ^ → // litr.add("A-add"); A A-add B C D ^ →
- 第二次迭代(向后)
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 ^ →
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。