关于java中遍历循环List集合时报java.util.ConcurrentModificationException的解释

有的小伙伴在进行遍历List集合时可能会遇到java.util.ConcurrentModificationException,之前我没有遇见过,在学习阿里巴巴出的java开发手册时看到了这一条,便自己进行了一番测试,结果发现果然如此。感谢前人跳坑,才有我等小辈的滋润编码生活。

话不多说,上代码:

package a;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListForeach {

    /**
     * 

    * @Title: main

    * @Description: 当需要便利List等集合时,需要变更集合内容时注意事项

    * @param args 设定文件

    * @author wangkai

    * @return void 返回类型

    * @throws
     */
    public static void main(String[] args) {

        List<String> a = new ArrayList<String>();   
        System.out.println(a.toString());
        a.add("1");      
        a.add("2");    
        System.out.println(a.toString());
        /**
         * 

            方法1. 采用foreach循环遍历。

            for (String temp : a) {          
                if("1".equals(temp)){              
                    a.remove(temp);  
                    System.out.println(a.toString());
                }      
            }
        */

        /**
         * 方法2. 采用Iterator迭代。
         */
        for(Iterator it = a.iterator();it.hasNext();) {
            String o = (String) it.next();
            if("1".equals(o)){              
                //a.remove(o);  
                it.remove();
                System.out.println(a.toString());
            }     
        }
        System.out.println(a.toString());
    }

}

在这里面我们提供了两个方法来进行遍历并删除其中的一条元素。

方法1,采用foreach循环,当然删除元素「1」时是没有问题的,当你删除元素「2」时,就该抛出此异常。
方法2,网上建议采用Iterator来进行迭代集合,但我也发现他会出现此异常。

最后总结出:

1。问题的根源在于删除了元素后,foreach遍历的数组进行了实时更新(或者是引用的地址内的数据已经被更改)导致的下一个值找不到。
2。网上建议采用的Iterator迭代的方法,由于其迭代在初始化的时候就已经固定了原来的数据,删除并不会更改迭代的数据(应该是类似于拷贝了一份出来)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值