list.remove()抛出java.util.ConcurrentModificationException
为什么下面的代码抛出java.util.ConcurrentModificationException 请有人解释一下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:列表){
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);
}
}