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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷丹 中级黑马   /  2013-10-24 22:09  /  1586 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

public class TestList{
          public static void main(String args[]){
                          List<String> li = new ArrayList<String>();   
                                    li.add("1");   
                                    li.add("2");   
                                    li.add("3");   
                                    li.add("4");   
                                    li.add("5");   
                                    li.add("6");
                                    for (String s : li) {   
                                        li.remove(s);   
                                    }
                                                for (int i = 0; i < li.size(); i++) {   
                                                                System.out.println(li.get(i));   
                                                }
    }
}

用增强的for循环,为什么会抛出ConcurrentModificationException的异常?

4 个回复

正序浏览
增强for循环:         for (类型 变量名 : 容器) { 循环体 } 容器中有多少个元素就执行多少次循环体
, 每次循环变量指向容器中不同的元素,但是不能对删除对象 因为底层是iterator接口
上面是并发修改异常
for( Person p:list)  遍历的过程要求是list容器的大小不可以改变
for(int i=0;i<list.size;i++)
你中途删掉了第2个数据  那么list的第三个数据立刻上来补充  list.get(i)就会取不到第3个数据
你如果还不明白的话 我可以看下http://www.docin.com/p-88950953.html#documentinfo中有介绍
回复 使用道具 举报
ConcurrentModificationException此乃并发访问异常,即你用for循环对lis集合正在进行迭代取值,当中又进行remove()是不允许的。
回复 使用道具 举报
本帖最后由 i'm_fine_ 于 2013-10-24 23:51 编辑

这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉解决办法是,你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉
回复 使用道具 举报
foreach是只读循环,不可对被循环对象进行增删改操作;
for循环可以操作被循环对象的任意数据
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马