调用 clear() 方法可清空 HashSet 所有元素,时间复杂度 O(n),安全高效;避免用 new HashSet() 替代,以防其他引用仍持有旧数据;无需预先检查 isEmpty(),循环中复用时推荐先 clear() 再 add。

调用 clear() 方法即可清空 HashSet 中的所有元素。
使用 clear() 方法
这是最直接、最常用的方式。它会立即移除集合中所有元素,使 size 变为 0,但 HashSet 对象本身仍存在,可继续添加新元素。
- 语法简单:`set.clear();`
- 时间复杂度为 O(n),实际中通常很快(底层是遍历哈希桶并清空)
- 不会影响 HashSet 的初始容量或加载因子,后续添加元素时按需扩容
注意不要用重新创建对象代替 clear()
写成 `set = new HashSet();` 看似“清空”,但本质是让旧对象失去引用,交给 GC 回收。如果其他地方还持有该 HashSet 的引用,旧集合并未真正清空。
- 错误示例:`mySet = new HashSet();` → 原来的 mySet 引用已丢失,但若 elsewhereSet 指向同一个对象,它仍含旧数据
- 正确做法始终优先用 `mySet.clear();`,确保所有引用看到的都是空集合
清空前可选判断是否为空
一般不需要。clear() 对空集合是安全的,反复调用无副作用,无需提前检查 `isEmpty()`。
- 冗余写法:`if (!set.isEmpty()) set.clear();` —— 不必要
- 简洁写法:`set.clear();` —— 推荐,清晰且高效
结合实际场景的小提示
比如在循环处理一批数据时重复使用同一个 HashSet 避免频繁创建对象:
- 初始化一次:`HashSet
tempSet = new HashSet();` - 每次循环开始前:`tempSet.clear();`
- 然后 add 新元素做去重或临时计算











