使用迭代器的向后列表迭代

时间:2016-06-26 07:57:44

标签: java

这里有一个关于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();

                }    
                }

            }

1 个答案:

答案 0 :(得分:1)

ListIterator是一种光标,指向某个元素。方法ListIterator.next()ListIterator.previous()将此光标移动到另一个元素,因此您的代码会反复向前和向后移动,从而导致无限循环。