Java 筛选列表值,我应该创建新列表还是从原始列表中删除值
假设我有一个包含单个值或值范围的列表。现在,如果我在此列表中添加一个新值或一个范围,它可能会与当前值/范围中的“无”或“多个”重叠。所有这些重叠的对象都应该组合起来创建一个新实例,该实例应该添加到列表中,同时需要从原始列表中删除包含在新实例中的对象 所以我的问题是,我真的应该从列表中删除这些对象,还是在每次迭代中创建一个新的列表。也就是说,进行编码: 解决方案1Java 筛选列表值,我应该创建新列表还是从原始列表中删除值,java,algorithm,list,Java,Algorithm,List,假设我有一个包含单个值或值范围的列表。现在,如果我在此列表中添加一个新值或一个范围,它可能会与当前值/范围中的“无”或“多个”重叠。所有这些重叠的对象都应该组合起来创建一个新实例,该实例应该添加到列表中,同时需要从原始列表中删除包含在新实例中的对象 所以我的问题是,我真的应该从列表中删除这些对象,还是在每次迭代中创建一个新的列表。也就是说,进行编码: 解决方案1 for (Range newObj : newItems){ Iterator it = oList.iterator();
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对该数据结构的支持,它可能对该任务来说太复杂了在手边。你还能回答吗,这里给出的哪个解决方案更好?这应该使用迭代器。但我明白你的意思。我会改进这个问题。