我是靠谱客的博主 慈祥百合,最近开发中收集的这篇文章主要介绍java.util.ConcurrentModificationException 报错,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

近日在项目中遇见java.util.ConcurrentModificationException报错......感觉是一个比较经典的错误,做个笔记分享一下。

 

使用for循环+list.remove();造成的。

经过如下测试,项目中使用JDK1.6出现的问题,我使用JDK1.8测试没有问题。故我判断可能和JDK版本有关系。如果你也遇到同样的问题,最好在自己的环境中测试一下。

下面是一个错误示例:Exception in thread "main" java.util.ConcurrentModificationException

public static void main(String[] args) {
List<String> strList =new ArrayList<String>();
strList.add("str1");
strList.add("str2");
strList.add("str3");
strList.add("str4");
strList.add("str5");
for (String str : strList) {
System.out.println(str);
if(str.equals("str3")) {
strList.remove(str);
}
}
}
输出:
str1
str2
str3
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at cn.sxt.dao.Test.main(Test.java:17)

下面是我测试的几种场景。(测试使用jdk1.8。和项目中jdk1.6的效果不一样。) 所以使用的话自己要亲自测试一下。

public static void main(String[] args) {
List<User> userList = new ArrayList<User>();
userList.add(new User(1,"悟空",30));
userList.add(new User(2,"八戒",20));
userList.add(new User(3,"沙和尚",10));
System.out.println("======================第一种 for (User user : userList)=======================");
for (User user : userList) {
if (user.getName().equals("八戒")) {
userList.remove(user);
System.out.println("删除成功");
}
}
for (User user : userList) {
System.out.println(user);
}
System.out.println("======================第二种 Iterator List<User>=======================");
userList = new ArrayList<User>();
userList.add(new User(1,"悟空",30));
userList.add(new User(2,"八戒",20));
userList.add(new User(3,"沙和尚",10));
Iterator<User> iterator = userList.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (user.getName().equals("八戒")) {
userList.remove(user);
System.out.println("删除成功");
}
}
for (User user : userList) {
System.out.println(user);
}
System.out.println("======================第三种 Iterator List<Integer>=======================");
List<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
arrayList.add(Integer.valueOf(i));
}
Iterator<Integer> it = arrayList.iterator();
while (iterator.hasNext()) {
Integer integer = it.next();
if (integer.intValue() == 3) {
arrayList.remove(integer);
}
}
for (Integer i : arrayList) {
System.out.print(i.intValue()+"t");
}
System.out.println();
System.out.println("======================第四种 for (Integer i : arrayList) =======================");
arrayList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
arrayList.add(Integer.valueOf(i));
}
for (Integer i : arrayList) {
if (i.intValue() == 3) {
arrayList.remove(i);
}
}
for (Integer i : arrayList) {
System.out.print(i.intValue()+"t");
}
System.out.println();
System.out.println("======================第五种 for (int i = 0; i < strList.size(); i++)
=======================");
List<String> strList =new ArrayList<String>();
strList.add("str1");
strList.add("str2");
strList.add("str3");
strList.add("str4");
strList.add("str5");
for (int i = 0; i < strList.size(); i++) {
System.out.print(strList.get(i)+"t");
if(i==2){
strList.remove(i);
}
}
System.out.println();
for (int i = 0; i < strList.size(); i++) {
System.out.print(strList.get(i)+"t");
}
System.out.println();
System.out.println("======================第六种 for (String str : strList) =======================");
strList =new ArrayList<String>();
strList.add("str1");
strList.add("str2");
strList.add("str3");
strList.add("str4");
strList.add("str5");
for (String str : strList) {
System.out.println(str);
if(str.equals("str3")) {
strList.remove(str);
}
}
}

测试输出结果如下:

======================第一种 for (User user : userList)=======================
删除成功
User [id=1, name=悟空, age=30]
User [id=3, name=沙和尚, age=10]
======================第二种 Iterator List<User>=======================
删除成功
User [id=1, name=悟空, age=30]
User [id=3, name=沙和尚, age=10]
======================第三种 Iterator List<Integer>=======================
0	1	2	3	4
======================第四种 for (Integer i : arrayList) =======================
0	1	2	4
======================第五种 for (int i = 0; i < strList.size(); i++)
=======================
str1	str2	str3	str5
str1	str2	str4	str5
======================第六种 for (String str : strList) =======================
str1
str2
str3
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at cn.sxt.dao.Test.main(Test.java:102)

其中我参考了:https://www.cnblogs.com/snowater/p/8024776.html 这篇文章。

最后

以上就是慈祥百合为你收集整理的java.util.ConcurrentModificationException 报错的全部内容,希望文章能够帮你解决java.util.ConcurrentModificationException 报错所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部