我是靠谱客的博主 超级白羊,最近开发中收集的这篇文章主要介绍并发修改异常ConcurrentModificationException,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这是一个在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所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部