应直接调用 isEmpty() 方法,时间复杂度 O(1),语义清晰高效;若可能为 null,需先判空再调用,如 set != null && set.isEmpty() 或 Objects.nonNull(set) && set.isEmpty()。

直接调用 isEmpty() 方法即可,这是最标准、高效且推荐的方式。
使用 isEmpty() 方法
HashSet 继承自 AbstractCollection,而 AbstractCollection 实现了 Collection 接口,其中 isEmpty() 是接口定义的标准方法。它内部仅判断 size == 0,时间复杂度为 O(1),无额外开销。
- ✅ 正确写法:
if (set.isEmpty()) { ... } - ❌ 不推荐:
if (set.size() == 0)—— 虽然结果等价,但语义不如isEmpty()清晰,且部分集合实现中size()可能有轻微开销(尽管 HashSet 中没有) - ❌ 错误写法:
if (set == null)—— 这是判空指针,不是判集合是否为空;必须先确保对象非 null,再调用isEmpty()
结合 null 安全检查(常见场景)
实际开发中,HashSet 变量可能为 null,因此常需先判空再判空集:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
if (set != null && set.isEmpty()) { ... }- 若使用 Java 8+,可配合
Objects.nonNull()提高可读性:if (Objects.nonNull(set) && set.isEmpty()) - 使用 Optional 时(如返回值封装),可写成:
optionalSet.filter(Set::isEmpty).isPresent()
不建议的替代方式
以下方式逻辑上可行,但违背规范、影响可读性或存在隐患:
-
!set.iterator().hasNext()—— 多余创建迭代器,性能差,语义模糊 -
set.stream().findAny().isEmpty()—— 引入 Stream 开销,小题大做 -
set.toArray().length == 0—— 触发数组复制,O(n) 时间与空间开销
总之,判 HashSet 是否为空集,只用 isEmpty() 就够了;加上 null 检查就更健壮。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










