Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 筛选列表值,我应该创建新列表还是从原始列表中删除值_Java_Algorithm_List - Fatal编程技术网

Java 筛选列表值,我应该创建新列表还是从原始列表中删除值

Java 筛选列表值,我应该创建新列表还是从原始列表中删除值,java,algorithm,list,Java,Algorithm,List,假设我有一个包含单个值或值范围的列表。现在,如果我在此列表中添加一个新值或一个范围,它可能会与当前值/范围中的“无”或“多个”重叠。所有这些重叠的对象都应该组合起来创建一个新实例,该实例应该添加到列表中,同时需要从原始列表中删除包含在新实例中的对象 所以我的问题是,我真的应该从列表中删除这些对象,还是在每次迭代中创建一个新的列表。也就是说,进行编码: 解决方案1 for (Range newObj : newItems){ Iterator it = oList.iterator();

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

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

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

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

我认为您可以避免每次迭代新项目时创建新列表,或者您可以完全避免创建新列表

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); 
    } 
用于(对象newObj:newItems){

对于(int i=0;i“也许另一个解决方案更好”)这是正确的:。您在列表中使用对象的事实对我来说很糟糕。为什么不定义一个范围(从,到)对象。这将封装单个值和非zerro范围。您的组合逻辑不必内省传递的对象(我怀疑您目前正在这样做)@BrianAgnew我实际上没有使用Object,这是因为该对象没有一个好的名称。我实际上使用了一个抽象类,它由一个范围和一个值类实现。@dasblinkenlight谢谢。这可能是最好的解决方案,但如果没有本机Java对该数据结构的支持,它可能对该任务来说太复杂了在手边。你还能回答吗,这里给出的哪个解决方案更好?这应该使用迭代器。但我明白你的意思。我会改进这个问题。