단일 값 또는 값 범위가 포함 된 목록이 있다고합시다. 이제이 목록에 새 값이나 범위를 추가하면 현재 값/범위의 여러 값과 중복되지 않을 수 있습니다. 이 겹치는 모든 오브젝트를 결합하여 새 인스턴스를 작성해야합니다.이 인스턴스는 목록에 추가해야하며 새 인스턴스에 포함 된 오브젝트는 원래 목록에서 삭제해야합니다.목록 값을 필터링하여 새 목록을 만들거나 원래 목록에서 값을 삭제해야합니까
내 질문에, 정말 목록에서 해당 개체를 삭제하거나 모든 반복마다 새 목록을 만들어야합니다. 즉, 코드에 넣어 :
해결 방법 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;
}
아마 다른 해결책이 더 나은 것입니다. 그렇다면 친절하게 알려주십시오.
"다른 해결책이 더 나은 것 같습니다."올바른 점은 : 간격 나무가 더 좋은 해결책을 제공합니다. (http://en.wikipedia.org/wiki/Interval_tree). – dasblinkenlight
목록에서 Object를 사용한다는 사실은 나에게 나쁘다. Range (from, from) 객체를 정의하지 않는 이유는 무엇입니까? 그것은 단일 값과 비 제로 범위를 캡슐화합니다. 조합 논리는 어떤 객체가 전달되었는지에 대해 내성을 가질 필요가 없습니다. (현재 당신이 의심하는 것처럼) –
@BrianAgnew 저는 실제로 객체를 사용하지 않습니다. 이것은 객체의 올바른 이름이 부족하기 때문입니다. 실제로는 범위와 단일 값 클래스에 의해 구현되는 추상 클래스를 사용합니다. – Deiwin