java.util.concurrentmodificationexception出现原因以及解决方法

话说啊在我前几天做实验的的时候,突然蹦出了一个很奇怪的异常,在这里先用一段代码将这个异常抛出来
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class asdwq {
	public static void main(String[] args) throws IOException {
		List<Integer> list=new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		for(Integer integer:list){
			list.remove(integer);
		}
    }
}

这个异常我之前没见过啊,先看一下他说的是什么意思,这个翻译成中文大概意思是同时发生的修改异常,再往下看,可以看出这个异常与ArrayList和itr有关。这里大概就可以猜出这个异常产生是因为我在使用ArratList的时候同时修改了它,但很多时候我也经常在使用一个对象的同时再修改他,为什么之后ArrayList如此矫情呢?

经过阅读大佬的文章我了解到在我用迭代器遍历数组的时候,每次.next方法都会调用checkForComodification放伐,而checkForComodification方法就是用来判断集合发生结构性变化(加入元素,删除元素等操作)的次数是否发生改,如果发生改变就会抛出concurrentmodificationexception异常。所以连起来就是在使用Iterator.next方法的时候如果对集合进行了结构性操作就会抛出此异常。由此可见我们常用的for(Object object:collection)和foreach遍历方法都不能使用了,想要边遍历边修改集合只能使用for循环了。。。而且Iterator在所有集合类遍历中都要用到,有顺序的List能用for循环,要是遇到Set,Map等没有顺序的集合我就只能将要操作的对象先放到一个集合里面,等到遍历之后在统一操作了。。。

参考链接:

https://blog.csdn.net/kingzone_2008/article/details/41368989

猜你喜欢

转载自blog.csdn.net/fire_mole/article/details/80411608
今日推荐