【问题标题】:does using remove on iterator makes code to work very slow?在迭代器上使用 remove 会使代码工作得非常慢吗?
【发布时间】:2011-01-10 13:37:43
【问题描述】:

我有如下代码,它在迭代器上使用 remove 显示:

Collection<X> getdata(){
   Collection<X> Xs = this.getXs();
    Iterator<X> iterator = Xs.iterator();
    while (iterator.hasNext()) {
        X x = iterator.next();
        if (somecondition) {
            iterator.remove();
            }
        }
    }

 return Xs;
}

它有时有效,有时需要很长时间,我的线程挂起。 getXs 方法从 DB 中返回数据。

【问题讨论】:

  • 信息不足
  • 还需要什么信息?
  • 哪些代码行很慢? getXs() 访问数据库很慢?还是“某些条件”很复杂?还是使用了 ORM 集合?
  • 你使用什么样的 Collection?
  • 如果Xs 以某种方式绑定到数据库本身(即在其上调用remove() 或其迭代器实际上从数据库中删除了一行),那么remove() 可能是一项昂贵的操作(但不应该比Collection 本身上的remove() 贵)。基本上:什么 org.life.java 说的!

标签: java iterator


【解决方案1】:

迭代和删除本身不会出现您描述的异常行为。还有其他环境条件在起作用。由于您描述了与数据库的交互,因此延迟和挂起很可能与您的代码与数据交互的方式有关。实际问题可能有无数种变化,因此您可以提供的任何其他详细信息(与您发布的非常笼统的示例相反)都将有助于解决您的问题。

【讨论】:

  • 谢谢。我会尝试修改代码并检查。过一段时间会回来
猜你喜欢
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
相关资源
最近更新 更多