2013-06-20 86 views
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(); 
     } 
    } 
} 

在上面的代码中,我从iterator如果它们匹配的标准除去的对象。

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

+0

外循环的后续迭代不会变得更快,因为它们使用不同的'favObjPage.getBeans()'列表。 – dasblinkenlight

+0

您确定可以在迭代器中从迭代器中删除对象吗? – EsseTi

+0

多数民众赞成什么迭代器的特殊功能,删除时迭代:) – Satya

回答

0

恕我直言Iterator.remove()是从迭代器删除元素是迭代过程中修改集合,因为,因为迭代器是快速失败的Java中的最好方式..

0

这真的取决于多少豆子做你期望相匹配你的标准。

如果在每个内循环迭代中只有一个,那么删除它几乎不会引起任何显着差异。另一方面,如果你的bean列表很大,并且你期望一个符合条件的bean的双数数字(我认为它只能发生一次),那么在外循环的后续迭代中试图再次匹配它们会浪费内部循环周期,因此Iterator.remove()应该帮助。

总结,离开objIter.remove();不会有什么伤害,并可能有所帮助,具体取决于找到的匹配数量。只要确保您删除的任何比赛都不应该再次符合参加比赛的资格。