概述
这是一个在java中经常出现的一类错误,错误的主要原因是集合类中的迭代器去遍历集合的时候,由于之前的操作中集合发生了改变,而迭代器并没有被改变,因此不能再通过集合去操作,否则就会出现该异常。下面简单举例:
在一个集合中,里面已存在三个元素分别为“h”,”j”,”k”,需要实现以下操作:
判断集合中有无”h”元素,如果有,则添加一个”a”元素。
常见出错思路如下:
A:创建一个集合,并添加多个元素
B:遍历集合,获取到每一个元素
C:判断元素有没有是"h"的,如果有,就往集合中添加一个新元素a
D:直接输出集合名称
当使用迭代器进行相关操作时就会出现相应的异常。代码如下:
public class ListIteratorDemo3 {
public static void main(String[] args) {
// 创建一个集合,并添加多个元素
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
// 遍历集合,获取到每一个元素
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
// 判断元素有没有是"world"的,如果有,就往集合中添加一个新元素android
if ("world".equals(s)) {
list.add("android");
}
}
在这里,迭代器是依赖于集合而存在的,我们用迭代器遍历集合的时候,如果有满足条件的,我们就通过集合调用add()功能添加了一个元素,也就是说这个时候,集合发生了改变,而迭代器并没有发生改变,这样就产生了并发修改异常。
解决方案:
不使用迭代器遍历,用普通for循环遍历,元素添加到了集合的结尾。
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("android");
}
}
使用列表迭代器,遍历使用迭代器,添加也使用迭代器,遍历到哪里,元素就添加到哪里。
ListIterator lit = list.listIterator();
while (lit.hasNext()) {
String s = (String) lit.next();
if ("world".equals(s)) {
lit.add("android");
}
}
最后
以上就是超级白羊为你收集整理的并发修改异常ConcurrentModificationException的全部内容,希望文章能够帮你解决并发修改异常ConcurrentModificationException所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复