我有两套。 (来自Guava HashMultimap.values())。如果两个集合的交集是非空集,我需要快速找到。我不需要知道常见元素,只要有共同元素。我正在考虑使用Sets.intersection,但是它是o(m + n),如果我们找到一个公共元素而不必创建整个交集(比如set.intersection(set2).any()),我们可以保释。 (数据集非常大,此操作在循环内发生,因此性能至关重要。)
欢迎任何建议。谢谢。
答案 0 :(得分:25)
使用正常的JDK,这只是
!Collections.disjoint(set1, set2)
如果找到一个共同的元素,这会立即发生。
(虽然 - 为了它的价值 - Sets.intersection
比你意识到的更懒。它会在一个恒定的时间内返回一个视图,它的isEmpty()
方法也会在找到第一个元素后立即保释很常见,所以效率也很高。)
答案 1 :(得分:4)
您可以使用Collection#retainAll()。
仅保留此集合中包含的元素 指定集合(可选操作)。换句话说,删除 从这个集合中包含的所有元素都没有包含在 指定的集合。