停止Java迭代的条件

| 晚上好。我无法找到条件来停止程序内部的循环。我将尝试尽可能全面地解释它,以便该问题可能会帮助处于相同情况的其他人: 我有一些物件。 在循环内有一段代码,我生成了更多对象。 我想将这些对象添加到集合中。 一旦添加了它们,我想对其进行迭代,除非之前已经对其进行了迭代。 伪代码:
While (!everyObjectHasBeenIteratedOver){
    for (Object o : SetOfObjects){
        // Generate an unknown number of objects
        // Add those objects to the SetOfObjects unless they\'re already there
    }
}
基本上就是这样。 我知道的唯一答案是使用列表,该列表支持在迭代列表上添加元素而不拆分,但是我个人使用的是HashSets。 有任何想法吗? 先谢谢了。 编辑:最后使用一组访问对象,另一组用于未访问对象。 条件:
while (!notVisited.isEmpty()) {...}
    
已邀请:
我建议使用2个集合:访问和toBeVisited。可以设置访问者并设置为访问-队列。因此,仅当尚未访问新项目时,才将其添加到队列中。并且,当您将项目添加到队列时,您也将其添加到集合。     
如果对象已经存在,则添加到集合将不会执行任何操作。因此,这应该不是问题。如果对象具有相同的标识(记住覆盖override2ѭ和
equals(..)
),但其他字段不同,则可以使用
set.contains(..)
进行检查。 如果要迭代某个集合,请对其进行修改,但继续对原始集合进行迭代,然后在开始时制作一个副本,并在添加到原始副本的同时迭代该副本。     
我会采取递归方法
public doSomething(Collection<Object> doTo, Set<Object> beenDone) {
  for(Object o : collection) {
    Collection<Object> newObjects = createObjects(0);
    doSomething(newObjects,beenDone);
    beenDone.add(o);
  }
   return beenDone;
}

public mainIteration(Collection<Object> collection) {
  Set<Object> operatedOn = new HashSet<Object>();
  doSomething(collection,operatedOn);
}
    

要回复问题请先登录注册