概述
近日在项目中遇见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 报错所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复