首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for-each循环不抛出ConcurrentModificationException

for-each循环不抛出ConcurrentModificationException
EN

Stack Overflow用户
提问于 2017-06-29 01:52:09
回答 1查看 86关注 0票数 0

我有一个遍历列表并移除对象的方法。

代码语言:javascript
复制
public void iterateAndRemove(List<String> l) {
    for (String s : l) {
        l.remove(s); //should throw exception
    }
}

理想情况下,这应该抛出一个异常,因为我没有使用Iterator

但它就是工作得很好。我的理解是错的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 01:53:41

广为人知的概念是,通过Iterator删除是一种故障保护机制。

但是javac each循环可以用来从列表中删除一项,因为会在内部生成使用迭代器的代码,反复调用hasNextnext方法。

此外,即使for-each抛出并发修改异常,程序也没有必要总是抛出异常,因此您不能依赖于几个测试运行。

但您必须注意,这对于单线程环境是正确的。对于多线程环境,你必须锁定一个对象,以便你的程序不会抛出异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44809460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档