0

假设我有一个包含单个值或值范围的列表。现在,如果我向此列表添加一个新值或一个范围,它可能会与当前值/范围的多个不重叠。所有这些重叠的对象应该组合起来创建一个新的实例,该实例应该被添加到列表中,同时新实例中包含的对象需要从原始列表中删除。

所以我的问题是,我真的应该从列表中删除这些对象还是在每次迭代时创建一个新列表。也就是说,放入代码:

解决方案 1

for (Range newObj : newItems){
  Iterator it = oList.iterator();
  while (it.hasNext()){
    Range o = it.next();
    if (canCombine(newObj, o)){
      newObj = combine(newObj, o);
      it.remove();
    }
  }
  oList.add(newObj);
}

解决方案 2

for (Range newObj : newItems){
  List newList = new ArrayList();
  for (Range o : oList){
    if (canCombine(newObj, o)){
      new = combine(newObj, o);
    } else {
      newList.add(o);
    }
  }
  newList.add(newObj);
  oList = newList;
}

也许另一种解决方案会更好。如果是这样,请告诉我。

4

1 回答 1

0

我认为您可以避免在每次迭代 newItems 时创建 newList,或者您可以完全避免创建新列表。

for (Object newObj : newItems){  
    for(int i=0;i<oList.size();i++){
        if (canCombine(newObj, oList.get(i))){ 
          newObj = combine(newObj,  oList.get(i)); 
          oList.remove(i);
        }    
      }  
      oList.add(newObj); 
    } 
于 2012-08-13T16:43:20.267 回答