BitSet.intersects()用于快速判断两个BitSet是否存在至少一个共同为true的位,返回布尔值;不计算具体交集、不修改原集合,调用需通过实例且参数不能为null。

是的,BitSet.intersects() 就是用来快速判断两个 BitSet 是否存在**至少一个共同为 true 的位**,也就是“是否有交集”。它不返回交集内容,只返回 true 或 false。
核心作用:轻量级交集存在性检查
这个方法专为“有没有重叠”而设计,不计算具体哪些位重合,也不修改原集合。适合用在需要前置条件判断的场景,比如:
- 资源分配前确认是否已被占用(每个 bit 表示一个资源 ID)
- 权限校验时快速判断用户角色权限与所需权限是否有重叠
- 布隆过滤器辅助结构中做初步碰撞检测
调用方式与参数要点
必须通过实例调用,不能用类名直接调;参数是另一个 BitSet 对象:
-
bs1.intersects(bs2)✅ 正确 -
BitSet.intersects(bs2)❌ 编译报错(非静态方法) - 如果传入
null,会抛出NullPointerException
返回值逻辑很明确
只要两个 BitSet 中有任意一个相同索引位置的位都为 true,就返回 true:
-
bs1 = {2, 5, 8}(即第 2、5、8 位为 true) -
bs2 = {5, 10, 15}→ 因为第 5 位重合 →intersects()返回true -
bs2 = {1, 3, 7}→ 没有共同位 → 返回false
和 and() 方法的区别要清楚
如果你需要知道“交集具体是哪些位”,不能靠 intersects():
-
intersects():只回答“有没有?”——快、省资源、布尔结果 -
and():会实际执行按位与,并把结果写入调用者自身(如bs1.and(bs2)会把bs1改成交集) - 若需交集内容又不想改原对象,可先
clone()再and()










