问题
我有两套,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,因为你不必进行任何克隆以避免修改原始集。