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

© jk7130866 中级黑马   /  2015-7-27 22:27  /  297 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
                //创建一个集合容器,使用Collection接口方法。
                ArrayList al=new ArrayList();
                   //添加元素
                al.add("abxd1");
                al.add("abxd2");
                al.add("abxd3");
        //在迭代过程中,添加或删除元素
              for( Iterator it=al.iterator();it.hasNext();){
                      Object obj=it.next();
                      if(obj.equals("abxd1")){
                              al.add("asdasd");//并发访问
                              
                      }
              }                
        }结果:引发了java.util.ConcurrentModificationException。当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。这是什么意思呢,当集合添加元素的时候,集合获得了元素的引用,那么集合就可以对元素进行操作,当执行到Iterator it=al.iterator()这条语句的时候,元素的引用就被取到了迭代器里面。现在操作元素的方法就有两种了,要么用集合的方法要么用迭代器的方法。这两种方法操纵的是同一组元素。当使用迭代器的方法操作元素时,同时用集合的方法操作用一组元素,就有可能引起安全隐患。

1 个回复

倒序浏览
迭代过程中只能使用迭代的方法操作数据
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马