zoukankan      html  css  js  c++  java
  • java foreach循环删除报错

    1、使用foreach 进行删除数据时,出现错误:

      List<String> list = new ArrayList<String>();
            list.add("1");
            list.add("2");
            list.add("3");
            for (String temp : list) {
                if ("3".equals(temp)) {
                    list.remove(temp);
                }
            }
            System.out.println(list.toString());

    出现错误:

    java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
        at java.util.ArrayList$Itr.next(ArrayList.java:831)

    原因:

    foreach方式遍历元素的时候,是生成iterator,然后使用iterator遍历。在生成iterator的时候,会保存一个expectedModCount参数,这个是生成iterator的时候List中修改元素的次数。如果你在遍历过程中删除元素,List中modCount就会变化,如果这个modCount和exceptedModCount不一致,就会抛出异常。这个是为了安全的考虑。如果使用iterator遍历过程中,使用List修改了元素,可能会出现不正常的现象。如果使用iterator的remove方法则会正常,因为iterator的remove方法会在内部调用List的remove方法,但是会修改excepedModCount的值,因此会正常运行,如下代码所示:

        public void remove() {
                if (lastRet < 0)
                    throw new IllegalStateException();
                checkForComodification();
    
                try {
                    ArrayList.this.remove(lastRet);
                    cursor = lastRet;
                    lastRet = -1;
                    expectedModCount = modCount;
                } catch (IndexOutOfBoundsException ex) {
                    throw new ConcurrentModificationException();
                }
            }

    2、正常删除代码如下:不使用foreach

      List<String> list = new ArrayList<String>();
            list.add("1");
            list.add("2");
            list.add("3");
            Iterator<String> iterator = list.iterator();
            while(iterator.hasNext()){
                if (iterator.next().equals("3")){
                    iterator.remove();
                }
            }
    
            System.out.println(list.toString());
    工作小总结,有错请指出,谢谢。
  • 相关阅读:
    剑指offer_11:二进制中1的个数
    剑指offer_10:矩形覆盖
    spring mvc 访问静态资源
    spring context:component-scan ex
    spring aop配置未生效
    415 Unsupported Media Type
    spring mvc 接收List对象入参
    JIRA甘特图
    JIRA的工时
    JIRA导出工作日志到Excel
  • 原文地址:https://www.cnblogs.com/zilanghuo/p/6677851.html
Copyright © 2011-2022 走看看