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

unc*_*ons 13 java collections guava

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

任何建议都是受欢迎的.谢谢.

Lou*_*man 26

使用正常的JDK,这只是

!Collections.disjoint(set1, set2)
Run Code Online (Sandbox Code Playgroud)

如果找到一个共同的元素,这会立即失败.

(虽然 - 为了它的价值 - Sets.intersection比你意识到的更懒惰.它在恒定时间内返回一个视图,并且它的isEmpty()方法也会在找到第一个共同元素后立即保释,所以它同样有效.)


Rah*_*thi 4

您可以使用Collection#retainAll()

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