并发修改异常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");
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值