黑马程序员技术交流社区

标题: 为什么 iterator() 迭代器方法不能实现下面的程序 [打印本页]

作者: 我干阿衰    时间: 2015-5-7 21:57
标题: 为什么 iterator() 迭代器方法不能实现下面的程序
  import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class List_Test {
        public static void main(String[] args) {
                List list = new ArrayList();
                list.add("Java");
                list.add("JavaWeb");
                list.add("JavaEE");
                System.out.println(list);
                  method(list);
        }
        private static void method(List list) {
                for (Iterator it = list.iterator(); it.hasNext(); ) {
                        String s = (String)it.next();
                        //判断当前元素是否为Java
                        if ("Java".equals(s)) {
                                //向集合中添加一个新的元素为"Android"
                                list.add("Android");
                        } //为什么报这样的错误 : Exception in thread "main" java.util.ConcurrentModificationException
                }
        }
}

               


作者: 大兵在海边    时间: 2015-5-7 22:27
这个是“并发修改异常”,你在用迭代器遍历的时候不能对集合元素作添加和删除操作
作者: 大兵在海边    时间: 2015-5-7 22:34
而List特有的迭代器ListIterstor 有向集合添加的方法;你可以这样遍历
ListIterator it=list. listiterator();
while(it.hasNext){
                        String s = (String)it.next();
                        //判断当前元素是否为Java
                        if ("Java".equals(s)) {
                                //向集合中添加一个新的元素为"Android"
                                it.add("Android");
}
作者: 虎鹏    时间: 2015-5-8 00:20
不用或者用it调add
作者: 396460221    时间: 2015-5-8 11:01
是并发修改异常。原则是要么全用集合的方法要么全用迭代器的方法。你这是迭代的时用集合的方法,肯定会出错,原因开始将集合中的所有元素引用都取到迭代器中,而迭代器在取出的过程中你的集合里又添加了元素,这时迭代器是取呢还是不取呢。List集合有个特有的迭代器,ListIterator里的方法很多,增删改设置都有的。
作者: 欧阳文    时间: 2015-5-8 11:17
代器遍历的时候不能对集合元素做任何操作、

作者: 彭越    时间: 2015-5-8 12:25
并发修改异常,不能对集合元素作添加和删除操作
作者: 我干阿衰    时间: 2015-5-8 21:05
396460221 发表于 2015-5-8 11:01
是并发修改异常。原则是要么全用集合的方法要么全用迭代器的方法。你这是迭代的时用集合的方法,肯定会出错 ...

谢谢,理解了

作者: 王英明    时间: 2015-5-8 21:11
看看刘意老师day10天基础视频




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