日期:2014-05-17  浏览次数:20851 次

整天干ssh有点单调,大家来回顾回顾se
Java code

List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for (Integer integer : list) {
            if(integer==3){
                list.remove(integer);
            }


以上这段代码不报错,但是
Java code

        List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for (Integer integer : list) {
            if(integer==3){
                list.remove(integer);
            }
        }


这段代码会报错,为什么

------解决方案--------------------
代码没贴完?
------解决方案--------------------
我没发现任何的不一样啊
你确定有区别么
------解决方案--------------------
。。。其实都报错。for增强。。迭代器遍历。。。检测到迭代器和list里面的count不一致,所以报错了
------解决方案--------------------
NC!
------解决方案--------------------
额 我晕,, 不应该是foreach么? 没仔细看!!
------解决方案--------------------
刚才看了下 会报java.util.ConcurrentModificationException这样的错
在网上收一下有解释

------解决方案--------------------
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (Integer integer : list) {
if(integer==2){
list.remove(integer);
break;
}
}
这样就不会报错了
------解决方案--------------------
呵呵 不过一般不这么写循环的吧,这样写了会被骂的~
------解决方案--------------------
楼上的是怎么写这样的循环
------解决方案--------------------
还真别说,只有3的时候不抱错。关注解释...
------解决方案--------------------
list没有被remove之前modCount为5,remove之后modCount为6,因为这两个一致就抛出了一个runtimeException。不清楚modCount的作用是什么,求解
------解决方案--------------------
Java code

                List<String> strList  =new ArrayList<String>();
        strList.add("1");
        strList.add("2");
        strList.add("3");
        strList.add("4");
        for(String data:strList){
            if("3".equals(data)){
                strList.remove(data);//remove之前strList的modCount为4,remove之后modCount为5  remove之后没有报错
            }
        }

------解决方案--------------------
http://blog.csdn.net/hanzhen143437/article/details/5567067
这里有解释。看着解释还不错