【发布时间】:2016-01-24 03:46:04
【问题描述】:
下面的代码安全吗?假设它是单线程的。
for(String s : set){
set.remove(s);
set.remove(randomElementFromSet());
}
我很确定这应该没问题,但我想仔细检查一下,我不会冒迭代已删除元素的风险。
如果可能的话,请提供参考,以便我下次查找。
【问题讨论】:
-
不,不是。您可以使用故障安全迭代器。更多信息请参考link
-
不,它可能会抛出 ConcurrentModificationException。使用最后一条评论中所述的迭代器。
-
你为什么不测试一下?如文档所述,使用标准 HashSet 或 TreeSet,您将获得 ConcurrentModificationException。
-
您是否创建了测试场景并执行了代码?那已经回答了你的问题。