并发修改例外我有这段小代码,它给了我并发修改异常。我无法理解为什么我一直得到它,即使我没有看到任何同时进行的修改。import java.util.*;public class SomeClass {
public static void main(String[] args) {
List<String> s = new ArrayList<>();
ListIterator<String> it = s.listIterator();
for (String a : args)
s.add(a);
if (it.hasNext())
String item = it.next();
System.out.println(s);
}}
3 回答

隔江千里
TA贡献1906条经验 获得超10个赞
为避免这种情况ConcurrentModificationException
,您应该像这样编写代码:
import java.util.*;public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<String>(); for(String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if(it.hasNext()) { String item = it.next(); } System.out.println(s); }}
A java.util.ListIterator
允许您在迭代期间修改列表,但不允许在创建和使用它之间修改列表

慕娘9325324
TA贡献1783条经验 获得超4个赞
我无法理解为什么我一直得到它,即使我没有看到任何同时进行的修改。
在创建迭代器和开始使用迭代器之间,您向要迭代的列表添加了参数。这是一个并发修改。
ListIterator<String> it = s.listIterator(); for (String a : args) s.add(a); // concurrent modification here if (it.hasNext()) String item = it.next(); // exception thrown here
在完成向列表中添加元素之后创建迭代器:
for (String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if (it.hasNext()) String item = it.next();
添加回答
举报
0/150
提交
取消