Java:实现“重复直到没有更改”集合

Java:实现“重复直到没有更改”集合,java,algorithm,collections,Java,Algorithm,Collections,我正在尝试实现一种算法,该算法可以重复地对当前列表中的集合应用操作。在每个步骤中,可以使用集合中的getter和setter添加、删除和更改元素。重复该算法,直到在上一步中未对集合进行任何更改 元素的顺序不相关。但是,在下一个循环之前,不应访问修改或创建的元素 我的方法是有一个大的主循环,和一个应用算法的内部循环,并将修改、创建和未更改的元素复制到第二个列表中。内部循环完成后,将清空原始列表并替换为新列表。如果新列表和旧列表包含相同的元素,则主循环终止 最好的方法是什么?是否有支持这种开箱即用的

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

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

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

最好的方法是什么?是否有支持这种开箱即用的集合?第三方也可以


任何帮助都将不胜感激

我只会使用一个在主循环开始时设置为false的布尔变量。当对内部循环中的列表进行更改时,可以将其设置为true,如果未进行任何更改,则保持为false。如果这是真的,则主循环可以继续循环,否则可以完成循环

因为您说顺序不相关,所以可以使用的实现,例如。你可以简单地用equals方法比较相等的集合。

你的方法听起来很合理,但有很多集合复制。我认为您可以将同一个集合馈送到内部循环中,该循环将就地更新集合,并指示是否进行了任何更改,例如,在CollectionUpdate时

如果集合不是太大,或者您不希望对其进行太多更改,那么递归工作得很好。 e、 g


+1-从长远来看,这是最简单、最有效的解决方案。
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;
}