类似于'包含任何'的Java集?

问题

我有两套,A和B,相同类型。

我必须找到A是否包含集合B中的任何元素。

没有迭代集合,最好的方法是什么? Set库有contains(object)containsAll(collection),但不是containsAny(collection)


#1 热门回答(392 赞)

Wouldn'tCollections.disjoint(A, B)work?从文档:

如果两个指定的集合没有共同的元素,则返回true。

因此,如果集合包含任何公共元素,则该方法返回false


#2 热门回答(86 赞)

自Java 8:setA.stream().anyMatch(setB::contains)


#3 热门回答(23 赞)

实现containsAny for sets的一种好方法是使用GuavaSets.intersection()

containsAny将返回aboolean,因此调用如下:

Sets.intersection(set1, set2).isEmpty()

如果集合是不相交的,则返回true,否则返回false。这个时间复杂度可能稍微好于retainAll,因为你不必进行任何克隆以避免修改原始集。