这里有一个关于listiterator的代码。在向前方向上正常工作但是当它向后迭代时它进入无限循环。在每个元素打印之后我放一个加号并在结尾列表中生成。如果不包括后向迭代但是向后的问题,则工作正常。为什么它发生我不知道?
package iteratordemo;
import java.util.*;
/**
*
* @author New
*/
public class IteratorDemo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ArrayList<String> al=new ArrayList<String>();
al.add("a");
al.add("b");
al.add("c");
al.add("d");
al.add("e");
System.out.println("original content of al:" +al);
Iterator<String> itr=al.iterator();
while(itr.hasNext()){
String element=itr.next();
System.out.println(element + " ");
}
System.out.println();
/* modify the object being iterated
*/
ListIterator litr=al.listIterator();
while(litr.hasNext()){
Object element = litr.next();
litr.set(element + "+");
System.out.println("modified content of al: " );
itr=al.iterator();
while(itr.hasNext())
{
element=itr.next();
System.out.println(element + " ");
}
System.out.println();
// now display the list backward
// while returning in backward direction it goes into infinite loop
System.out.println("modified list backwards:");
while(litr.hasPrevious()){
element= litr.previous();
System.out.println(element + " ");
}
System.out.println();
}
}
}
答案 0 :(得分:1)
ListIterator
是一种光标,指向某个元素。方法ListIterator.next()
和ListIterator.previous()
将此光标移动到另一个元素,因此您的代码会反复向前和向后移动,从而导致无限循环。