【发布时间】:2010-11-08 08:47:22
【问题描述】:
这个错误我花了一段时间才找到...
考虑这种方法:
public void foo(Set<Object> set)
{
Object obj=set.iterator().next();
set.remove(obj)
}
我使用非空哈希集调用该方法,但不会删除任何元素!
为什么会这样?
【问题讨论】:
-
在 Java 中是否允许在迭代集合时弄乱集合?这是 C# 中的一大禁忌。
-
实际上,在 C# 中,在集合更改后重新使用迭代器是错误的。从使用迭代器获得的集合中删除一个元素是可以的。
-
并非如此。你也可以在 C# 中做到这一点。除非您这样做,否则对迭代器的任何进一步操作都将导致异常。不过在这种情况下不是问题。
-
@DrJokepu - 如果您正在迭代集合,那将是一个禁忌,您应该在迭代器上调用 remove,但看起来@Yvon Rozijin 只是使用迭代器来获取第一个列表中的元素。
-
java.util.Iterator 上没有 dispose,所以我们在迭代器运行时调用 remove。