是迭代器';Iterator和Listiterator的规则不同?(Java)
我正在练习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");
迭代器
和列表迭代器
并且很难理解下面代码的结果 代码:
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 DD 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
^ →