【问题标题】:Call removing method for all set members调用所有集合成员的删除方法
【发布时间】:2014-09-01 11:43:57
【问题描述】:

在一个程序中,我有一个HashSetFoo

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&lt;Foo&gt; 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


【解决方案1】:

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

试试

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

这将安全地从集合中移除。甚至不用调用destroy。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多