黑马程序员技术交流社区

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

作者: yangruijing    时间: 2015-3-4 10:29
标题: 迭代器问题
本帖最后由 yangruijing 于 2015-3-4 10:41 编辑

public class listDemo {
           public static void main(String[] args) {
                // TODO Auto-generated method stub
                //演示列表迭代器
                ArrayList al1=new ArrayList();
                //添加元素
        al1.add("java01");//add方法的参数类型是object,以便于接收任意类型对象      
                al1.add("java02");
        al1.add("java03");
        /*
         * 要求:在迭代过程添加,修改或删除元素
         */
      //迭代器
        Iterator it=al1.iterator();
        while(it.hasNext())
        {
                Object obj=it.next();
                if(obj.equals("java3"))
                {
                        al1.add("java04");
                }
                sop(it.next());
        }
        sop(al1);
        }
public static void sop(Object obj)
        {
                System.out.println(obj);
        }}
主函数中的代码能不能编译通过?不通过会出现什么问题?为什么?怎么解决?



作者: wdhm5423    时间: 2015-3-4 10:39
本帖最后由 wdhm5423 于 2015-3-4 10:54 编辑

你的class呢、、最基本的结构
  1. public class Demo {

  2.         public static void main(String[] args) {
  3.         }
  4. }
复制代码
还有就是导包。迭代器遍历过程中修改元素的话,运行会报错。

作者: 田得聖老师    时间: 2015-3-4 11:09
编译是没有问题的,运行时代码第二个.next()方法会抛出NoSuchElementException异常(没有元素可以迭代)
while循环中只能调用一次.next()方法,把sop(it.next())改成sop(obj)
作者: 笑望长空,逆转    时间: 2015-3-4 12:28
我记得迭代器遍历过程中不能对集合中的数据进行修改,否则会出现异常.
作者: zfgrinm    时间: 2015-3-4 14:26
首先,你的while循环出现了两次next(),每次next()都会取下一个元素,当集合的元素为奇数个时,就会报错。
其次,集合的Iterator里面只有hasNext(),next(),remove()三个方法,如果你想增加或者修改集合中的元素,可以选用ListIteetor迭代器,这个是List特有的迭代器,可以对元素进行增删改查。
作者: wenyu    时间: 2015-3-4 15:48
出现的异常叫做并发处理异常。迭代器在遍历集合的同时,集合对其做了增加元素处理,就会报错




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