collections.disjoint()用于判断两个集合是否不相交,返回true表示无共同元素,false表示至少有一个共同元素;它基于equals()比较,不修改原集合,空集合与任何集合均视为不相交。

Collections.disjoint() 是 Java 集合工具类中一个简洁高效的方法,用来判断两个集合是否完全不相交(即交集为空)。它返回 true 表示两个集合没有共同元素,false 表示至少有一个元素同时存在于两个集合中。
方法签名与基本用法
该方法定义如下:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public static boolean disjoint(Collection> c1, Collection> c2)
- 参数可以是任意实现了
Collection接口的类型(如ArrayList、HashSet、LinkedList、Arrays.asList()等) - 内部会自动选择更高效的遍历策略:默认以较小集合为基准,逐个检查其元素是否在较大集合中存在(对支持
O(1)查找的集合如HashSet效果更好) - 如果任一集合为
null,会抛出NullPointerException
典型使用示例
以下代码演示常见场景:
List<string> list1 = Arrays.asList("a", "b", "c");
List<string> list2 = Arrays.asList("d", "e", "f");
System.out.println(Collections.disjoint(list1, list2)); // true
List<string> list3 = Arrays.asList("a", "x", "y");
System.out.println(Collections.disjoint(list1, list3)); // false(因为 "a" 重复)</string></string></string>
- 即使集合类型不同(如
HashSet和ArrayList),也能正常工作 - 元素比较基于
equals(),所以确保自定义对象正确重写了equals()和hashCode()
注意事项和常见误区
- 不修改原始集合 —— 它是纯函数式操作,只读检查
- 性能依赖于集合的
contains()实现效率:用HashSet做参数比ArrayList更快(尤其数据量大时) - 空集合与任何集合都视为不相交:
Collections.disjoint(new ArrayList(), anyList)返回true - 不要误以为它返回交集内容 —— 它只返回布尔值,如需获取交集,请用
retainAll()或流式操作
替代写法对比(不推荐但可参考)
手动实现等效逻辑会更繁琐且易错:
// 不推荐:冗长、低效、未处理 null
boolean hasCommon = false;
for (Object o : c1) {
if (c2.contains(o)) {
hasCommon = true;
break;
}
}
-
Collections.disjoint()已做优化(比如避免重复调用size()、提前退出、合理选择遍历方向) - 标准库方法更可靠,也更易读懂和维护
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










