Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的ConcurrentModification异常_Java - Fatal编程技术网

java中的ConcurrentModification异常

java中的ConcurrentModification异常,java,Java,当我在遍历集合时尝试修改集合时,将导致ConcurrentModification异常(即,使用forEach和ForEachRestain时) 但下面的代码不会解释为什么 List<String> list=new ArrayList<>(); list.add("ram"); list.add("ravi"); Iterator<String> it=list.iterator(); while(it.hasNext()){ System.ou

当我在遍历集合时尝试修改集合时,将导致ConcurrentModification异常(即,使用forEach和ForEachRestain时)

但下面的代码不会解释为什么

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

list.add("ram");
list.add("ravi");
Iterator<String> it=list.iterator();
while(it.hasNext()){
  System.out.printing(it.next());
 it.remove();
}
List List=new ArrayList();
列表。添加(“ram”);
列表。添加(“ravi”);
Iterator it=list.Iterator();
while(it.hasNext()){
System.out.printing(it.next());
it.remove();
}
你会问为什么

List<String> list = new ArrayList<>();  
Iterator<String> it = list.iterator();
while(it.hasNext()) {
    System.out.printing(it.next());
}
在你的例子中

iterating_collection is TRUE

modifying_collection is FALSE
但是

所以

exception_thrown is FALSE
在英语中,不会抛出CCME


现在查看更新的代码:

List<String> list = new ArrayList<>();  
list.add("ram");
list.add("ravi");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.printing(it.next());
    it.remove();
}
List List=new ArrayList();
列表。添加(“ram”);
列表。添加(“ravi”);
Iterator it=list.Iterator();
while(it.hasNext()){
System.out.printing(it.next());
it.remove();
}
在本例中,您使用迭代器修改集合。这是一种允许您在迭代集合时修改集合的情况


想想看。如果不允许
Iterator.remove()
从正在迭代的集合中删除元素,那么这将是一个根本无用的操作

你能把实际代码放在这里吗?您的代码甚至无效。因为它没有修改列表(!)@p.streef-是。我们看到了。他认为自己在修改名单,但显然不是@p、 是的。你有吗??他要求解释为什么他的代码没有使用CCM,答案是因为在B。。。你不是在做A。Q的倒数通常不会回答另一个。。。当OP显然没有“得到它”时。和本例一样。但是使用foreachreserving不能执行迭代器。删除。为什么?嗯?如果您正在进行
forEachRemaining
调用,则无法访问迭代器。告诉我你的意思。我的意思是,当你在同一个迭代器的ForEachResisting中使用iterator.remove时,CCME会发生。为什么?it.ForEachResisting(data->{System.out.println(data);it.remove();}这是一个场景,但它不是CCME。这是一个非法的状态异常。
exception_thrown is FALSE
List<String> list = new ArrayList<>();  
list.add("ram");
list.add("ravi");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.printing(it.next());
    it.remove();
}