【问题标题】:Is it better to remove objects form Iterator从迭代器中删除对象是否更好
【发布时间】:2013-06-17 03:58:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 外循环的后续迭代不会变得更快,因为它们使用了不同的favObjPage.getBeans() 列表。
  • 您确定可以在迭代器中移除对象吗?
  • 这就是迭代器的特殊功能,在迭代时删除:)

标签: java performance iterator iteration


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2012-04-01
      • 2020-11-21
      • 1970-01-01
      • 2016-12-02
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多