list.remove()抛出java.util.ConcurrentModificationException

list.remove()抛出java.util.ConcurrentModificationException,java,Java,为什么下面的代码抛出java.util.ConcurrentModificationException 请有人解释一下ConcurrentModificationException的一般情况,并参考此代码! 谢谢 import java.util.ArrayList; 导入java.util.List; 公开课考试{ 公共静态void main(字符串参数[]){ 列表=新的ArrayList(); 列表。添加(“a”); 列表。添加(“b”); 列表。添加(“c”); 用于(字符串s:列表){

为什么下面的代码抛出java.util.ConcurrentModificationException

请有人解释一下ConcurrentModificationException的一般情况,并参考此代码! 谢谢

import java.util.ArrayList;
导入java.util.List;
公开课考试{
公共静态void main(字符串参数[]){
列表=新的ArrayList();
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“c”);
用于(字符串s:列表){
如果(s)等于(“a”);
列表。删除(“a”);
}
系统输出打印项次(列表);
}
}

在对集合进行迭代时,不能修改集合的内容,因为这会使迭代无效。这样做会导致ConcurrentModificationException

线路

list.remove("a");
在迭代中,并导致异常。

请参阅

正如它所说:

该类的迭代器和listIterator方法返回的迭代器是快速失效的:如果在创建迭代器后的任何时候以任何方式(除迭代器自己的remove或add方法外)修改列表的结构,迭代器将抛出一个ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速、干净地失败,而不是在将来的不确定时间冒着任意、不确定行为的风险

它可以通过显式地使用迭代器来完成

for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
    if (it.next().equals("a")) {
        it.remove();
    }
}
for(Iterator it=list.Iterator();it.hasNext();){
if(it.next().equals(“a”)){
it.remove();
}
}
使用simple for each循环您没有访问迭代器的权限(但它用于运行这样的循环),因此您无法进行任何结构修改。

我会保持它的简单性

import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String args[]){

    List<String> list = new ArrayList<String>();

    list.add("a");
    list.add("b");
    list.add("c");

    int i;

    //Go through each element of list
    for (i = 0; i < list.size(); i++)
    {
        //Test if element needs deleting
        if (list.get(i).equals("a")){
            //Delete element
            list.remove(i);
            //Update reference given element deleted
            i--;
        }
    }
    System.out.println(list);
    }
}
import java.util.ArrayList;
导入java.util.List;
公开课考试{
公共静态void main(字符串参数[]){
列表=新的ArrayList();
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“c”);
int i;
//检查列表中的每个元素
对于(i=0;i
您可以使用带有增强for循环的迭代器。对于迭代器,您需要使用迭代器删除该值。
import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String args[]){

    List<String> list = new ArrayList<String>();

    list.add("a");
    list.add("b");
    list.add("c");

    int i;

    //Go through each element of list
    for (i = 0; i < list.size(); i++)
    {
        //Test if element needs deleting
        if (list.get(i).equals("a")){
            //Delete element
            list.remove(i);
            //Update reference given element deleted
            i--;
        }
    }
    System.out.println(list);
    }
}