我正在尝试实现一种在Collection(当前是List)上重复应用操作的算法。在每个步骤中,可以在集合中添加,删除和更改元素(使用getter和setter)。重复该算法,直到在前一步骤中没有对集合进行任何改变。
元素的顺序无关紧要。但是,在下一个循环之前,不应访问修改或创建的元素。
我的方法是拥有一个大型主循环,以及一个应用算法的内部循环,并将修改,创建和未更改的元素复制到第二个List。内循环完成后,原始列表将被清空并替换为新列表。如果新列表和旧列表包含相同的元素,则终止主循环。
最好的方法是什么?有没有一个支持这个开箱即用的集合?第三方也行。
真的很感激任何帮助!
答案 0 :(得分:4)
我只想使用在主循环开始时设置为false的布尔变量。当对内循环中的列表进行更改时,可以将其设置为true,如果未进行任何更改,则保持为false。如果这是真的话,主循环可以继续循环,否则
完成循环答案 1 :(得分:1)
你的方法对我来说听起来很合理,但有大量的收藏复制。我认为你可以将相同的集合提供给内部循环,以便在适当的位置更新集合,并指示是否进行了任何更改,例如while(collectionUpdated)。
如果集合不是太大或者你不希望它有很多变化,那么递归效果很好。 e.g。
runAlgo(Collection c) {
// do work
if (collectionUpdated)
return runAlgo(c); // potential stackoverflow with huge collection or too many calls from lots of collection updates
else
return c;
}
答案 2 :(得分:0)
由于您说订单不相关,请使用Set
interface的实施,例如HashSet。您可以使用equals
方法简单地比较集合。