总的来说就是在循环的时候把list集合更改了,集合的下标和元素对应不起来,通过查度娘的一些解决办法,我针对自己所需要的方式做了一次修改。
原本我写的是 :
ArrayList<Integer> objects = new ArrayList<>();
ArrayList<Integer> objects1 = new ArrayList<>();
objects.add(1);
objects.add(2);
objects.add(3);
objects.add(4);
objects.add(5);
objects.add(6);
System.out.println("集合1:" + objects);
objects1.add(6);
objects1.add(7);
objects1.add(4);
for (Integer object : objects) {
if (object==1){
//如果object是1的时候objects就删除与objects1相同的元素
objects.removeAll(objects1);
}
}
运行后会报错
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.guomo.app.TimeTest.main(TimeTest.java:100)
针对自己的解决方法:
就是用for循环:删除两个集合中元素重复的
数据
for (int i = 0; i < objects.size(); i++) {
for (Integer integer : objects1) {
//判断集合中是否有该元素,因为另外一个集合中有没有的元素,找不到对应的下标,所以会报-1的错
if (objects.contains(integer)==true) {
objects.remove(objects.indexOf(integer));
System.out.println(objects);
}
}
}