java 并发操作list集合导致java.util.ConcurrentModificationException
来源:互联网 发布:anime studio pro mac 编辑:程序博客网 时间:2024/05/20 03:05
(转载)http://blog.csdn.net/coderinchina/article/details/41945299?utm_source=tuicool&utm_medium=referral
需求:我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
代码如下:
- public class Test {
- public static void main(String[] args) {
- List<String> list = new ArrayList<String>();
- list.add("java");
- list.add("world");
- list.add("android");
- Iterator<String> iterator = list.iterator();
- while(iterator.hasNext()){
- String content = iterator.next();
- if("world".equals(content)){
- list.add("hello");
- }
- }
- System.out.println(list);
- }
- }
运行报错信息:
首先我们打开jdk文档查看下这个异常,因为java是面向对象语言,异常也封装成了对象,
ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。
如何解决呢?
A:迭代器迭代元素,迭代器修改元素
元素是跟在刚才迭代的元素后面的。
B:集合遍历元素,集合修改元素(普通for)
元素在最后添加的
解决方案:for循环我就不试了,就用另一种方式解决,代码如下:
- public class Test {
- public static void main(String[] args) {
- List<String> list = new ArrayList<String>();
- list.add("java");
- list.add("world");
- list.add("android");
- ListIterator lit = list.listIterator();
- while (lit.hasNext()) {
- String s = (String) lit.next();
- if ("world".equals(s)) {
- lit.add("javaee");
- }
- }
- System.out.println(list);
- }
- }
因为ListIterator有add()方法 就解决了
0 0
- java 并发操作list集合导致java.util.ConcurrentModificationException
- java 并发操作list集合导致java.util.ConcurrentModificationException
- List java.util.ConcurrentModificationException
- 集合遍历 java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException:并发修改异常!
- java.util.ConcurrentModificationException 并发修改异常处理
- 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- java.util.ConcurrentModificationException 集合remove异常
- 修改集合抛出java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException 与集合删除
- 深入分析集合并发修改异常(源码分析)java.util.ConcurrentModificationException
- 关于迭代器的在集合遍历中发生的并发修改异常(java.util.ConcurrentModificationException
- 【ConcurrentModificationException】java.util.ConcurrentModificationException 解决办法
- java.util.ConcurrentModificationException! java.util.ConcurrentModificationException!
- java:java.util.ConcurrentModificationException
- 从集合List中删除对象,正确写法(异常java.util.ConcurrentModificationException
- java.util.list操作
- java Jedis连接池的使用
- oracle rman 备份脚本
- docker学习-安装及基本命令使用
- CAS--SSO单点登录完整教程
- 单元测试中模拟HttpContext.Current
- java 并发操作list集合导致java.util.ConcurrentModificationException
- ScrollView 的content设置
- 已知left和top,求right和bottom
- mysql中日期比较大小方法详解
- id类型和NSObject的区别
- 八大排序算法
- 获取Android设备唯一标识码
- 在MRC模式下使用AFNetworking,SDWebImage,MJRefresh
- sqlServer 查看表结构(字段类型)