ConcurrentModificationException异常及解决方案
来源:互联网 发布:历史股价数据 编辑:程序博客网 时间:2024/05/18 03:02
有时候我们在遍历map集合或list集合时经常会出现如下异常:Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)at java.util.AbstractList$Itr.next(AbstractList.java:343)at com.test.Test.main(Test.java:34)
比如在遍历map集合时如下实例:
package com.test;import java.util.ArrayList;import java.util.List;import com.bean.Person;public class Test {public static void main(String[] args) {List<Person> l=new ArrayList<Person>();Person p=new Person(2, "lisi");Person p0=new Person(2, "lisi1");Person p3=new Person(2, "lisi1");Person p1=new Person(3, "lisi2");Person p2=new Person(4, "lisi3");l.add(p2);l.add(p1);l.add(p0);l.add(p);l.add(p3);List<Person> l1=new ArrayList<Person>();for (Person person : l) {if(person.getPname().equals("lisi1")){l.remove(person);}}for (Person person : l) {System.out.println(person);}}运行后会出现上述异常;
解决方案:
原因是在遍历一个map集合时,对容器中的数据进行数量的增加和减少惭怍就会抛出该异常;主要的原因是:当在遍历一个map容器时,此时map中的数量已经个数已经赋值给一个变量exceptionModCount,在调用next()方法时,会先比较该变量的值与容器中的实际个数modeCount的值是否相等,若二者不相等,则会抛出ConcurrentModificationException异常,因此在使用容器遍历时,如果对容器进行增加或删除操作,就会改变容器中对象的数量,从而导致抛出异常。解决方法如下:在遍历的过程中把需要删除的对象先保存在一个集合中,等遍历结束后在调用removeAll()方法来删除。
具体实现的方式:
package com.test;import java.util.ArrayList;import java.util.List;import com.bean.Person;public class Test {public static void main(String[] args) {List<Person> l=new ArrayList<Person>();Person p=new Person(2, "lisi");Person p0=new Person(2, "lisi1");Person p3=new Person(2, "lisi1");Person p1=new Person(3, "lisi2");Person p2=new Person(4, "lisi3");l.add(p2);l.add(p1);l.add(p0);l.add(p);l.add(p3);List<Person> l1=new ArrayList<Person>();for (Person person : l) {if(person.getPname().equals("lisi1")){l1.add(person);}}l.removeAll(l1);for (Person person : l) {System.out.println(person);}}}
修改后运行正确:
阅读全文
1 0
- ConcurrentModificationException异常及解决方案
- java.util.ConcurrentModificationException异常及解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- ArrayList删除元素并发异常ConcurrentModificationException解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- (转)Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- Java ConcurrentModificationException 异常分析与解决方案
- java.util.ConcurrentModificationException 异常解决办法及原理
- java.util.ConcurrentModificationException异常分析及处理
- 关于ConcurrentModificationException异常原因及注意事项
- Friend-Graph(暴力枚举)
- 用 Python 实现每秒处理 120 万次 HTTP 请求
- RxJava基础使用
- mybatis配置
- 算法学习之枚举--熄灯问题POJ1222EXTENDED LIGHTS OUT
- ConcurrentModificationException异常及解决方案
- 极角排序学习
- linux常用命令
- linux基础知识回顾
- Longest Valid Parentheses leetcode java
- andriod事件分发机制源码解析
- [LintCode]56.两数之和
- 8月19日训练笔记
- HDU 6152 Friend-Graph