我有一个遍历列表并移除对象的方法。
public void iterateAndRemove(List<String> l) {
for (String s : l) {
l.remove(s); //should throw exception
}
}理想情况下,这应该抛出一个异常,因为我没有使用Iterator。
但它就是工作得很好。我的理解是错的吗?
发布于 2017-06-29 01:53:41
广为人知的概念是,通过Iterator删除是一种故障保护机制。
但是javac each循环可以用来从列表中删除一项,因为会在内部生成使用迭代器的代码,反复调用hasNext和next方法。
此外,即使for-each抛出并发修改异常,程序也没有必要总是抛出异常,因此您不能依赖于几个测试运行。
但您必须注意,这对于单线程环境是正确的。对于多线程环境,你必须锁定一个对象,以便你的程序不会抛出异常。
https://stackoverflow.com/questions/44809460
复制相似问题