过滤列表值,我应该创建一个新列表还是从原始列表中删除值

时间:2012-08-13 16:09:16

标签: java algorithm list

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

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

解决方案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;
}

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

1 个答案:

答案 0 :(得分: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); 
    }