代码之家  ›  专栏  ›  技术社区  ›  Chris

Java:实现“重复直到不改变”集合

  •  2
  • Chris  · 技术社区  · 16 年前

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

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

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

    最好的方法是什么?有现成的支持这个的集合吗?第三方也可以。

    任何帮助都将不胜感激!

    3 回复  |  直到 16 年前
        1
  •  4
  •   royalsampler    16 年前

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

        2
  •  1
  •   marklai    16 年前

    你的方法对我来说听起来很合理,但有很多收藏复制品。我认为您可以将同一个集合馈送到内部循环中,该循环在适当的位置更新集合,并指示是否进行了任何更改,例如while(collectionupdated)。

    如果集合不是太大,或者您不希望对它进行太多的更改,递归就可以很好地工作。 例如

    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;
    }
    
        3
  •  0
  •   Thomas    16 年前

    既然您说该命令不相关,请使用 Set interface ,例如 HashSet . 您可以简单地将相等集与 equals 方法。