您的位置:首页 > 编程语言 > Java开发

java.util.ConcurrentModificationException

2015-08-13 20:58 357 查看

ConcurrentModificationException

异常Log:

Exception in thread "main" java.util.ConcurrentModificationException


产生异常的代码:

ArrayList al = new ArrayList();
// 1. 集合操作
al.add("java01");
al.add("java02");
al.add("java03");

// 2. 迭代器操作
Iterator it = al.iterator();
while(it.hasNext()) {
// java.util.ConcurrentModificationException
Object obj = it.next();
if (obj.equals("java02")) {
// 1. 集合操作
al.remove("java02");
}
}


原因:

操作元素的方法有两种:1. 集合 2. 迭代器

上面while循环的代码中同时使用了两种方法并发操作元素(使用Iterator查询元素,使用ArrayList删除元素),会产生安全隐患。Iterator不允许这样操作。

解决办法:

只用其中一种方式操作。

if (obj.equals("java02")) {
it.remove();
}


如果想要其他的操作如添加、修改等,就需要使用其子接口,即ListIterator。 该接口只能通过List集合的listIterator()获取。

ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");

ListIterator li = al.listIterator();
while(li.hasNext()) {
Object obj = li.next();
if (obj.equals("java02")) {
li.add("java09");
}
}

System.out.println("hasNext(): " + li.hasNext());
System.out.println("hasPrevious(): " + li.hasPrevious());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息