Java:实现“重复直到无变化”集合

时间:2010-02-21 19:13:26

标签: java algorithm collections

我正在尝试实现一种在Collection(当前是List)上重复应用操作的算法。在每个步骤中,可以在集合中添加,删除和更改元素(使用getter和setter)。重复该算法,直到在前一步骤中没有对集合进行任何改变。

元素的顺序无关紧要。但是,在下一个循环之前,不应访问修改或创建的元素。

我的方法是拥有一个大型主循环,以及一个应用算法的内部循环,并将修改,创建和未更改的元素复制到第二个List。内循环完成后,原始列表将被清空并替换为新列表。如果新列表和旧列表包含相同的元素,则终止主循环。

最好的方法是什么?有没有一个支持这个开箱即用的集合?第三方也行。

真的很感激任何帮助!

3 个答案:

答案 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方法简单地比较集合。