Java 在迭代器上使用remove会使代码运行得非常慢吗?

Java 在迭代器上使用remove会使代码运行得非常慢吗?,java,iterator,Java,Iterator,我有一个代码,如下所示,它在迭代器上使用remove: Collection<X> getdata(){ Collection<X> Xs = this.getXs(); Iterator<X> iterator = Xs.iterator(); while (iterator.hasNext()) { X x = iterator.next(); if (somecondition) {

我有一个代码,如下所示,它在迭代器上使用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;
}
Collection getdata(){
集合Xs=this.getXs();
迭代器迭代器=Xs.Iterator();
while(iterator.hasNext()){
X=迭代器.next();
如果(某些条件){
iterator.remove();
}
}
}
返回Xs;
}

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

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

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

信息不足还需要哪些信息?哪些代码行比较慢?getXs()访问数据库的速度慢吗?或者“某些条件”是复杂的?或者使用ORM集合?您使用哪种集合?如果
Xs
以某种方式绑定到数据库本身(即对其调用
remove()
,或者其迭代器实际上从数据库中删除一行),那么
remove()
可能是一个昂贵的操作(但不应该比
remove()更昂贵)
集合
本身上)。基本上:org.life.java是这么说的!信息不足还需要什么信息?哪些代码行速度慢?getXs()访问数据库的速度慢吗?或者“某些条件”是复杂的?或者使用ORM集合?您使用哪种集合?如果
Xs
以某种方式绑定到数据库本身(即对其调用
remove()
,或者其迭代器实际上从数据库中删除一行),那么
remove()
可能是一个昂贵的操作(但不应该比
remove()更昂贵)
集合
本身上)。基本上:org.life.java是这么说的!谢谢。我会努力修改代码并检查。过些时候会回来的。谢谢。我会努力修改代码并检查。过些时候会回来的