黑马程序员技术交流社区

标题: 集合迭代器问题 [打印本页]

作者: 李健09    时间: 2013-8-11 21:19
标题: 集合迭代器问题
本帖最后由 李健09 于 2013-8-13 12:09 编辑

import java.util.*;
public class ListDemo
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void method_ListIterator()
    {
        ArrayList al=new ArrayList();
        al.add("java01");
        al.add("java02");
        al.add("java03");
        al.add("java04");
        sop("原集合"+al);
        //在迭代器过程中准备添加和删除元素
        /*ListIterator li=al.listIterator();
        while(li.hasNext())//迭代器
        {
            Object obj=li.next();
            if(obj.equals("java02"))
                li.set("java006");
        }
        while(li.hasPrevious())
        {
            sop("pre="+li.previous());
        }*/
        for(ListIterator li=al.listIterator();li.hasNext();)//迭代器1
        {
            Object obj=li.next();
            if(obj.equals("java02"))
              li.set("java006");//[java01, java006, java03, java04] 修改java02为java006
        }
        for(ListIterator li=al.listIterator();li.hasPrevious();)//迭代器2
        {
            sop("pre="+li.previous());
        }
        sop("操作后"+al);
    }
    public static void main(String[] args)
    {
     method_ListIterator();
   }
}
问题 为什是么我用while写的迭代器可以运行 而for些的迭代器却不可以?
       现象 单个for迭代器1却可以可以运行为何迭代器2加上了反而不能呢?

作者: sergio    时间: 2013-8-11 22:45
可以运行啊,eclipse中测试了?不知道报什么错误?
作者: 神之梦    时间: 2013-8-11 23:36
建议代码放在编辑栏的“<>”这个东东里边
另外能把错误提示贴出更好
作者: 李健09    时间: 2013-8-12 09:16
神之梦 发表于 2013-8-11 23:36
建议代码放在编辑栏的“”这个东东里边
另外能把错误提示贴出更好

嗯 好的
作者: 李健09    时间: 2013-8-12 09:21
本帖最后由 李健09 于 2013-8-12 09:33 编辑
sergio 发表于 2013-8-11 22:45
可以运行啊,eclipse中测试了?不知道报什么错误?
  1. <p>import java.util.*;
  2. public class ListDemo
  3. {
  4.      public static void sop(Object obj)
  5.      {
  6.          System.out.println(obj);
  7.      }
  8.      public static void method_ListIterator()
  9.      {
  10.          ArrayList al=new ArrayList();
  11.          al.add("java01");
  12.          al.add("java02");
  13.          al.add("java03");
  14.          al.add("java04");
  15.          sop("原集合"+al);
  16.          //在迭代器过程中准备添加和删除元素
  17.         /*ListIterator li=al.listIterator();
  18.          while(li.hasNext())//迭代器
  19.         {
  20.              Object obj=li.next();
  21.              if(obj.equals("java02"))
  22.                  li.set("java006");
  23.          }
  24.          while(li.hasPrevious())
  25.          {
  26.              sop("pre="+li.previous());
  27.          }*/
  28.          for(ListIterator li=al.listIterator();li.hasNext();)//迭代器1
  29.          {
  30.              Object obj=li.next();
  31.              if(obj.equals("java02"))
  32.                li.set("java006");//[java01, java006, java03, java04] 修改java02为java006
  33.          }
  34.         sop("ListIterator hasNext 操作后"+al);
  35.          for(ListIterator li=al.listIterator();li.hasPrevious();)//迭代器2
  36.          {
  37.              sop("pre="+li.previous());
  38.          }
  39.       }
  40.      public static void main(String[] args)
  41.      {
  42.       method_ListIterator();
  43.     }</p><p>}</p><p>//你看下这样的代码   迭代器1中 sop("ListIterator hasNext 操作后"+al);这个可以运行;而2中的sop("pre="+li.previous());却不可以也没有抛出错误;</p><p>//输出的结果</p><p>原集合[java01, java02, java03, java04]ListIterator hasNext 操作后[java01, java006, java03, java04]</p>
复制代码

作者: sergio    时间: 2013-8-12 12:37
改成这样试下:
  1.                  ListIterator li = al.listIterator();
  2. //                 while (li.hasNext())// 迭代器
  3. //                 {
  4. //                 Object obj = li.next();
  5. //                 if (obj.equals("java02"))
  6. //                 li.set("java006");
  7. //                 }
  8. //                 while (li.hasPrevious()) {
  9. //                 sop("pre=" + li.previous());
  10. //                 }

  11.                 for ( al.listIterator(); li.hasNext();)// 迭代器1
  12.                 {
  13.                         Object obj = li.next();
  14.                         if (obj.equals("java02"))
  15.                         {
  16.                                 li.set("java006");// [java01, java006, java03, java04]
  17.                         }
  18.                         // 修改java02为java006
  19.                 }
  20.                 for (al.listIterator(); li.hasPrevious();)// 迭代器2
  21.                 {
  22.                         sop("pre="+li.previous());
  23.                 }
  24.                 sop(al);
复制代码

作者: 精彩生活向钱看    时间: 2013-8-12 12:50
                 ListIterator li = al.listIterator();
//                 while (li.hasNext())// 迭代器
//                 {
//                 Object obj = li.next();
//                 if (obj.equals("java02"))
//                 li.set("java006");
//                 }
//                 while (li.hasPrevious()) {
//                 sop("pre=" + li.previous());
//                 }

                for ( al.listIterator(); li.hasNext();)// 迭代器1
                {
                        Object obj = li.next();
                        if (obj.equals("java02"))
                        {
                                li.set("java006");// [java01, java006, java03, java04]
                        }
                        // 修改java02为java006
                }
                for (al.listIterator(); li.hasPrevious();)// 迭代器2
                {
                        sop("pre="+li.previous());
                }
                sop(al);




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