A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在正向和逆向取出容器中的元素时,我用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);
        }
}


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 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. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
对。是的。for循环结束后,里面的东西也跟着释放了。明白了。谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马