我有一个迭代列表并删除对象的方法。
public void iterateAndRemove(List<String> l) {
for (String s : l) {
l.remove(s); //should throw exception
}
}
理想情况下,这应该抛出异常,因为我没有使用Iterator
。
但它运作正常。我的理解错了吗?
答案 0 :(得分:0)
众所周知的概念是,通过Iterator
删除是一种自动防范的机制。
但 for-each 循环可用于从列表中删除项目,因为javac在内部生成使用Iterator的代码,重复调用hasNext
和next
方法。 / p>
此外,即使for-each抛出并发修改异常,程序也不一定会抛出异常,所以你不能依赖于一些测试运行。
但是你必须注意到单线程环境也是如此。对于多线程环境,您必须锁定一个对象,以便程序不会抛出异常。