Java Collection。查找两个集之间是否存在Common元素的最快方法

时间:2013-09-17 17:21:37

标签: java collections guava

我有两套。 (来自Guava HashMultimap.values())。如果两个集合的交集是非空集,我需要快速找到。我不需要知道常见元素,只要有共同元素。我正在考虑使用Sets.intersection,但是它是o(m + n),如果我们找到一个公共元素而不必创建整个交集(比如set.intersection(set2).any()),我们可以保释。 (数据集非常大,此操作在循环内发生,因此性能至关重要。)

欢迎任何建议。谢谢。

2 个答案:

答案 0 :(得分:25)

使用正常的JDK,这只是

!Collections.disjoint(set1, set2)

如果找到一个共同的元素,这会立即发生。

(虽然 - 为了它的价值 - Sets.intersection比你意识到的更懒。它会在一个恒定的时间内返回一个视图,它的isEmpty()方法也会在找到第一个元素后立即保释很常见,所以效率也很高。)

答案 1 :(得分:4)

您可以使用Collection#retainAll()

  

仅保留此集合中包含的元素   指定集合(可选操作)。换句话说,删除   从这个集合中包含的所有元素都没有包含在   指定的集合。