hashset是基于哈希表的无序不重复集合,add()和remove()平均时间复杂度为o(1),需正确重写hashcode()和equals(),支持null,批量操作依赖equals/hashcode,clear()清空元素但不释放底层数组内存。

HashSet 是 Java 中基于哈希表实现的无序、不重复集合,添加和删除元素都通过简单的方法调用完成,时间复杂度平均为 O(1)。
添加元素:使用 add() 方法
调用 add(E e) 方法向 HashSet 中插入元素。如果该元素已存在(根据 equals() 和 hashCode() 判断),则不添加,方法返回 false;否则添加成功并返回 true。
- 元素必须正确重写 hashCode() 和 equals() 方法,否则可能无法去重或查找失败
- 允许添加 null(只有一个 null 元素)
- 示例:set.add("apple")、set.add(new Person("Alice", 25))(前提是 Person 正确重写了 hashCode 和 equals)
删除元素:使用 remove() 方法
调用 remove(Object o) 方法删除指定元素。如果集合中存在该对象(按 equals 比较),则移除并返回 true;否则返回 false。
- 传入的参数类型是 Object,不需要与泛型类型完全一致,但 equals 判断必须成立
- 删除 null:直接调用 set.remove(null)
- 注意:不能通过 for-each 循环中直接调用 remove(),否则会抛出 ConcurrentModificationException;应使用 Iterator 的 remove() 方法安全删除
批量操作:addAll() 和 removeAll()
支持一次性添加或删除多个元素:
- set.addAll(anotherCollection):将另一个集合所有元素加入当前 HashSet(自动去重)
- set.removeAll(anotherCollection):从当前 HashSet 中移除另一个集合中包含的所有元素
- 这两个方法也依赖元素的 equals/hashCode 行为
清空整个集合
调用 clear() 方法可快速移除所有元素,集合变为空,但对象引用仍保留。
- 执行后 set.isEmpty() 返回 true
- 不释放 HashSet 底层数组内存,只是把每个桶置为 null
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











