并发修改异常
在处理集合时,可能会遇到ConcurrentModificationException,表明集合在迭代器中被修改使用。这对于调试来说可能是一个令人困惑的错误,特别是如果您在代码中没有看到任何明显的并发性。
考虑以下示例:
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); } }
在此代码中,ConcurrentModificationException 是抛出,因为在创建迭代器但尚未使用列表 s 时,通过添加元素(使用 s.add())修改了列表 s。
To要解决此问题,您应该在列表完全填充后创建迭代器。这是代码的更正版本:
import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); for (String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if (it.hasNext()) { String item = it.next(); } System.out.println(s); } }
此修改可确保在完全修改集合后创建和使用迭代器,从而防止任何并发问题。
以上是迭代集合时如何避免 ConcurrentModificationException?的详细内容。更多信息请关注PHP中文网其他相关文章!