【发布时间】:2014-09-01 11:43:57
【问题描述】:
在一个程序中,我有一个HashSet 的Foo:
final Set<Foo> set = new HashSet<>();
// add a lot of elements to the set
class Foo {
public void destroy() {
// other stuff [such as removing this as event handler]
set.remove(this);
}
}
我想为该集合的所有成员呼叫destroy()。
destroy() 方法的目的是从集合中删除作为事件处理程序的元素。
这是我尝试过的:
-
为每个循环使用迭代器 / - 抛出
ConcurrentModificationException:for (Iterator<Foo> i = set.iterator(); i.hasNext(); ) { i.next().destroy() } -
一次删除一个元素 - 非常低效:
while (!set.isEmpty()) { set.iterator().next().destory(); }
我正在寻找这个问题的解决方案,该解决方案适用于集合中的许多元素。非常感谢。
【问题讨论】:
-
可以设置.clear();帮你?
-
@BrunoFranco 这有帮助,但
//doing other stuff呢? —— -
尝试在你的类中实现/覆盖 finalize() 并且在 finalize 中你可以处理 //doing other stuff - 阅读关于如何正确覆盖 finalize 方法 java java.lang.Object 的教程,你需要调用它。
标签: java iterator set hashset elements