List比较问题

前提:
List A存放对象A,
List B存放对象B,
对象A和对象B有关联字段。
问题:
如果List A中的对象在List B中没有关联,则删除List A中的此元素。

可以自己写一个类似apache的Collections包中的ListUtil工具,
ListUtil.substract(listA, listB)
[code="java"]
public static List subtract(final List list1, final List list2) {
final ArrayList result = new ArrayList(list1);
final Iterator iterator = list2.iterator();

    while (iterator.hasNext()) {
        result.remove(iterator.next());
    }

    return result;
}

[/code]

1.判断A中的对象是否存在关联(关联是否为null),则删除
2.判断A中的对象的关联对象是否在List B中,如果不在,则删除

[color=red]对象A和对象B有关联字段。 [/color]
什么样关联

逻辑很简单的,你是在看担心效率问题吗?你的两个List的size有多少?能在构造List的时候就处理了吗?而不是在两个List中进行比较做筛选。

或者把B做成map,用关联值做为Key,这样删除List A中的未关联数据方便些;如果List B只是用于删除List A中的未关联数据,那可以做一个做一个关联值组成的Set就行了。

主要还是看你的数据结构和运用场景了。

建议B放在map或hashtable中。或者如楼上各位所说,在放到List的过程中就应该筛选了。而不是再进行比较然后筛选。这样效率非常低

对List B进行删除元素操作时,判断List A是否有关联元素,如果有,则删除List A中的相应元素