黑马程序员技术交流社区

标题: Iterator [打印本页]

作者: 余善航    时间: 2013-2-6 21:57
标题: Iterator
package aaa;

import java.util.ArrayList;

import java.util.ListIterator;

public class String_a {
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void main(String[] args) {
               
                ArrayList a1=new ArrayList();
                a1.add("java01");
                a1.add("java02");
               
       
                ListIterator ls=a1.listIterator();
                while(ls.hasNext())
                {
                        Object obj=ls.next();;
                       
                        if(obj.equals("java02"))
                        {
                                a1.add("jaadd");
                               
                        }
                       
                }
                sop(a1);
                       
       
        }
       

}



控制台错误
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
        at java.util.AbstractList$Itr.next(Unknown Source)
        at aaa.String_a.main(String_a.java:23)

//  不明白???
作者: 张庚    时间: 2013-2-6 22:06
package aaa;

import java.util.ArrayList;

import java.util.ListIterator;

public class String_a {
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void main(String[] args) {
               
                ArrayList a1=new ArrayList();
                a1.add("java01");
                a1.add("java02");
               
        
                List  Iterator ls=a1.listIterator();//这里的问题
                while(ls.hasNext())
                {
                        Object obj=ls.next();;
                        
                        if(obj.equals("java02"))
                        {
                                a1.add("jaadd");
                                
                        }
                        
                }
                sop(a1);
                        
        
        }
        

}

//在试试
作者: 李东城    时间: 2013-2-6 22:26
  1. if (obj.equals("java02")) {
  2.                                 ls.add("jaadd");
  3.                         }
复制代码
集合迭代期间,为保证数据的一致性,不能对集合中的元素进行操作,如果一定要用,只能使用迭代器中的方法(不建议)

作者: 刘凯    时间: 2013-2-6 22:35
这个视频上有讲啊 ,抛出ConcurrentModificationException异常  是当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection。通常在这些情况下,迭代的结果是不确定的。
如果检测到这种行为,一些迭代器实现可能选择抛出此异常。
      List  Iterator ls=a1.listIterator();
                while(ls.hasNext())
                {
                        Object obj=ls.next();;
                        
                        if(obj.equals("java02"))
                        {
                                a1.add("jaadd");//这里楼主用迭代时 有用了集合的方法进行存储 所以就会抛出ConcurrentModificationException异常
                                
                        }



作者: 侯丛政    时间: 2013-2-7 00:47
这个问题我前两天正好刚遇到过.
   首先这个异常的解释ConcurrentModificationException  当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
例如,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection。
   你在获取当前对象的迭代器后又用  a1.add("jaadd")对当前对象进行
修改, 迭代器就不高兴了.

作者: 杨芳    时间: 2013-2-7 07:46
迭代时,为保证数据一致性,通常不充许同时操作数据,Is.next()后多了个;号。
作者: walkonby    时间: 2013-2-7 09:52
你又在用迭代器进行遍历又在用集合进行添加
你要么用直接遍历集合 要么用迭代器进行添加
作者: 余善航    时间: 2013-2-7 19:07
  ListIterator ls=a1.listIterator();
这样的声明编译没有问题,  这属于Iterator 还是LIstIterator




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