我怎样才能最有效地计算列表/集合差异

时间:2011-08-22 14:17:03

标签: java data-structures

我有一个Object类:DemoObject。

DemoObject就像一些fooObjects的列表。

fooObjects有一个名为“ID”的字段。

现在假设我有两个demoObject:demoObject1和demoObject2。现在我想检查两个demoObject中是否存在一些fooObject,即在demoObject1和2中,然后我可能会从demoObject1中删除它。

为了检查来自两个demoObject的fooObject,我检查fooObject“ID”字段是否相同。

我如何才能最有效地完成它。

2 个答案:

答案 0 :(得分:2)

最简单,最惯用的解决方案要求您在类equals()中提供FooObject方法,该方法会根据对象的ID(或适当的Comparator)来比较对象。

完成此操作后,只需将第一个列表放入Set并使用Set.removeAll从集合中删除列表2中包含的所有元素:

List<FooObject> demoObject1 = ...
List<FooObject> demoObject2 = ...

Set<FooObject> set1 = new HashSet(demoObject1);
set1.removeAll(demoObject2);

答案 1 :(得分:0)

使用Set.retainAll()方法。我认为它可以满足您的需求。