在foreach循环中使用remove报ConcurrentModificationException异常原因

Posted 7-30-onlyone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在foreach循环中使用remove报ConcurrentModificationException异常原因相关的知识,希望对你有一定的参考价值。

在foreach循环中使用remove报ConcurrentModificationException异常原因

我的代码具体是这样的

   int dindex=0;
                    int did=getInt("请输入需要删除的学生学号:");
                    for (Student student:list) 
                        if(student.id==did)
                            list.remove(student);
                        
                    

 

这样会导致remove后,导致list在循环中下标和实际已经被修改后的下标不一致

 

我自己的解决方案是:

int dindex=-1;
                    int did=getInt("请输入需要删除的学生学号:");
                    for (Student student:list) 
                        if(student.id==did)
                            dindex=list.indexOf(student);
                        
                    
                    if(dindex!=-1)
                        list.remove(dindex);
                    else
                        System.out.println("没有此学生");

记录下标 不改变list本身 等foreach结束后,再删除

以上是关于在foreach循环中使用remove报ConcurrentModificationException异常原因的主要内容,如果未能解决你的问题,请参考以下文章

foreach循环里不能remove/add元素的原理

foreach循环中不能使用remove删除元素的原理解析

不要在 foreach 循环里进行元素的 remove / add 操作

不要在foreach循环里进行元素的remove/add操作

为什么阿里禁止在 foreach 循环里进行元素的 remove/add 操作

为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作