所有集成员的呼叫删除方法

时间:2014-09-01 11:43:57

标签: java iterator set hashset elements

在某个计划中,我有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()方法的目的是将元素作为事件处理程序和集合删除。

这就是我的尝试:

  • 对每个循环使用Iterator / - 抛出ConcurrentModificationException

    for (Iterator<Foo> i = set.iterator(); i.hasNext(); ) { i.next().destroy() }

  • 当时删除一个元素 - 可怕的低效率:

    while (!set.isEmpty()) { set.iterator().next().destory(); }

我正在寻找这个问题的解决方案,该解决方案适用于集合中的很多元素。非常感谢你。

1 个答案:

答案 0 :(得分:2)

你的第一次尝试差不多完成了。

尝试

   for (Iterator<Foo> i = set.iterator(); i.hasNext(); ) {
        Foo foo = i.next();  
        // other stuff with foo. Something like foo.someOtherStuff();
        i.remove();
   }

这将从集合中安全删除。甚至不需要召唤毁灭。