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

2022-09-03 09:24:51

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

欢迎任何建议。谢谢。


答案 1

使用正常的JDK,这只是

!Collections.disjoint(set1, set2)

如果发现一个共同的元素,这将立即保释。

(虽然 - 就其价值而言 - 比你意识到的更懒惰。它以恒定时间返回一个视图,并且它的方法也会在找到第一个共同的元素后立即保释,因此它将同样有效。Sets.intersectionisEmpty()


答案 2

您可以使用Collection#retainAll()

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