0

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

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

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

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

4

2 回答 2

0

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

于 2013-06-20T10:46:28.960 回答
0

这实际上取决于您希望有多少 bean 符合您的标准。

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

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

于 2013-06-20T10:46:43.413 回答