Java 从迭代器中删除对象更好吗

Java 从迭代器中删除对象更好吗,java,performance,iterator,iteration,Java,Performance,Iterator,Iteration,最好从迭代器中删除匹配的对象,以便下一次迭代更快。 例: for(最喜欢的favFolders:favFolders){ Set rootObjList=newhashset(); 字符串favFolderRootUuid=favFolder.getLink(); 迭代器objIter=favObjPage.getBeans().Iterator(); while(objIter.hasNext()){ FavoriteObject favObj=objIter.next(); if(favOb

最好从迭代器中删除匹配的对象,以便下一次迭代更快。 例:

for(最喜欢的favFolders:favFolders){
Set rootObjList=newhashset();
字符串favFolderRootUuid=favFolder.getLink();
迭代器objIter=favObjPage.getBeans().Iterator();
while(objIter.hasNext()){
FavoriteObject favObj=objIter.next();
if(favObj.getFavoriteFolderUuid().equalsIgnoreCase(favFolderRootUuid)){
添加(favObj.getObjectUuid());
objIter.remove();
}
}
}
在上面的代码中,如果对象符合条件,我将从迭代器中删除它们


所以我的问题是:由于要执行的迭代次数较少,是否最好删除,以便后续迭代更快?

IMHO
Iterator.remove()
是从迭代器中删除元素,这是在迭代过程中修改集合的最佳方法,因为迭代器在java中失败很快。

这实际上取决于您希望有多少bean符合您的条件

如果它在每个内部循环迭代中只有一个,那么删除它几乎不会有任何明显的区别。另一方面,如果您的bean列表很大,并且您确实希望有两位数的bean与标准匹配(我假设只能发生一次),那么在外部循环的后续迭代中尝试再次匹配它们将浪费内部循环周期,因此
Iterator.remove()
应该会有所帮助


最后,留下
objIter.remove()根据找到的匹配数,这不会造成伤害,也可能有帮助。只需确保删除的任何匹配项都不应再次符合匹配条件。

外部循环的后续迭代不会变得更快,因为它们使用不同的
favObjPage.getBeans()
list。您确定可以在迭代器迭代时从迭代器中删除对象吗?这就是迭代器的特殊功能,要在迭代时删除:)
for(Favorite favFolder : favFolders) {
    Set<String> rootObjList = new HashSet<String>();
    String favFolderRootUuid = favFolder.getLink();
    Iterator<FavoriteObjectBean> objIter = favObjPage.getBeans().iterator();
    while(objIter.hasNext()) {
            FavoriteObject favObj = objIter.next();
            if(favObj.getFavoriteFolderUuid().equalsIgnoreCase(favFolderRootUuid)) {
                rootObjList.add(favObj.getObjectUuid());
                objIter.remove();
        }
    }
}