增强for循环在移除元素时ConcurrentModificationException

来源:互联网 发布:现在做网络推广好做吗 编辑:程序博客网 时间:2024/05/16 13:41
  • 在使用增强for循环时,在循环体内移除一个集合元素后,出现concurrentModificationException异常的解决办法
List<String> list = new ArrayList<String>();        list.add("h");        list.add("y");        list.add("q");        for(String s : list){            System.out.println("外部:"+list.size());            if("q".equals(s)){                list.remove(s);            }        }    }错误:Exception in thread "main" java.util.ConcurrentModificationException    at ...

这是由于增强for循环底层调用的是迭代器的next和hasnext方法来遍历的,移除元素后,无法预知到元素的位置。这也是增强for的缺点,不能获取下标,不能动态删除集合中的内容。

  • 解决的办法如下:
List<String> list = new ArrayList<String>();        list.add("h");        list.add("y");        list.add("q");        List<String> list_remove = new ArrayList<String>();        for(String s : list){            if("q".equals(s)){            list_remove.add(s); //把要移除的统一放在一个集合            }        }        //统一移除        list.removeAll(list_remove);        System.out.println(list);//[h, y]
0 0