【发布时间】:2013-01-08 15:20:40
【问题描述】:
这是我上一个问题的后续:
Collection - Iterator.remove() vs Collection.remove()
下面两段代码,显然只有一行不同,但一个抛出异常,另一个不抛出异常。你能解释一下区别吗?
List<String> list = new ArrayList<String>
(Arrays.asList("noob1","noob2","noob3"));
System.out.println(list);
for (String str : list) {
if (str.equals("noob2")) {
list.remove(str);
}
}
运行良好,但如果我将条件更改为
if (!str.equals("noob2"))
代码抛出异常!
【问题讨论】:
-
java.util.ConcurrentModificationException
-
但它如何取决于“if”条件?
-
所以它会抛出 noob1 或 noob3?
-
是否有任何一般规则可以确定它?或者它是未定义的!
-
一般规则是什么?方法不对,改用Iterator,调试器看看哪里抛出异常。
标签: java collections iterator