黑马程序员技术交流社区

标题: 用for循环,为什么不能打印出逆向取出容器中的对象? [打印本页]

作者: 彭柏良    时间: 2014-12-3 09:53
标题: 用for循环,为什么不能打印出逆向取出容器中的对象?
在正向和逆向取出容器中的元素时,我用while循环可以按照正向和逆向的顺序取出容器中的元素,但用for循环时,却只能正向取出,但逆向却取不出来?为什么?求解答。
下面是我的代码:import java.util.*;
class CollectionDemo8
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java03");
               
                for(ListIterator li = al.listIterator();li.hasNext();)
                {
                        Object obj = li.next();
                        if(obj. equals("java02"))
                        {
                                li.set("java008");
                        }
                        //sop(obj);
                }
                sop(al);
                for(ListIterator li = al.listIterator();li.hasPrevious();)
                {
                        sop("pre:"+li.previous());
                }
               

下面是我用while循环的代码:
import java.util.*;
class CollectionDemo8
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java03");
                ListIterator li = al.listIterator();
                while(li.hasNext())
                {
                        Object obj = li.next();
                        if(obj. equals("java02"))
                        {
                                li.set("java008");
                        }
                        //sop(obj);
                }
                sop("修改后的对象:"+al);
               
                while(li.hasPrevious())
                {
                        sop("pre:"+li.previous());
                }
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}



作者: caobin    时间: 2014-12-3 09:55
本帖最后由 caobin 于 2014-12-3 10:11 编辑

因为如果你前面使用for循环的话,在顺序取完之后迭代器就消失了。你在逆序取的时候又新建一个迭代器,这时那个迭代器指的位置是在前面,所以你问他hasPrevious,他会得到一个false的答案,所以就取不出来了。我用下面的验证了一下,这样就可以取出来
  1. import java.util.*;
  2. class hh
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al = new ArrayList();
  7.                 al.add("java01");
  8.                 al.add("java02");
  9.                 al.add("java03");
  10.                                 ListIterator li = al.listIterator();
  11.                 while(li.hasNext())
  12.                                 {
  13.                                         sop("nex:"+li.next());
  14.                                 }
  15.                 for(;li.hasPrevious();)
  16.                 {
  17.                         sop("pre:"+li.previous());
  18.                 }
  19.                
  20.         }
  21.         public static void sop(Object obj)
  22.         {
  23.                 System.out.println(obj);
  24.         }
  25. }
复制代码



作者: 彭柏良    时间: 2014-12-3 12:10
对。是的。for循环结束后,里面的东西也跟着释放了。明白了。谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2