从Iterator中删除对象是否更好?

时间:2013-06-20 10:23:25

标签: java performance iterator iteration

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

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();
        }
    }
}

在上面的代码中,如果它们符合条件,我将从迭代器中删除它们。

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

2 个答案:

答案 0 :(得分:0)

IMHO Iterator.remove()是从迭代器中删除元素的,这是在迭代期间修改Collection的最佳方法,因为迭代器在java中是快速失败的。

答案 1 :(得分:0)

这实际上取决于您希望符合标准的豆子数量。

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

总而言之,离开objIter.remove();不会有任何伤害,可能会有所帮助,具体取决于找到的匹配数量。只需确保您删除的任何匹配都不符合再次匹配的条件。