HashSet是Java中基于哈希表实现的无序、不重复集合,add()和remove()依赖hashCode()与equals()判断元素存在性,支持null(仅一个),自定义类需重写二者以确保正确去重与查找。

HashSet 是 Java 中基于哈希表实现的无序、不重复集合,添加和删除元素都很高效(平均时间复杂度 O(1))。核心操作依赖 add() 和 remove() 方法,底层通过对象的 hashCode() 和 equals() 判断是否重复或存在。
怎么添加元素
使用 add(E e) 方法插入元素。如果该元素(根据 equals + hashCode 判断)已存在,添加失败并返回 false;否则插入成功,返回 true。
- 添加成功时集合大小增加 1,重复添加同一对象(或逻辑相等的对象)不会改变集合内容
- 允许添加
null(仅一个),因为null.hashCode()不会调用,HashSet 内部特殊处理 - 自定义类需正确重写
hashCode()和equals(),否则可能无法去重或查找失效
HashSet<String> set = new HashSet<>();
set.add("apple"); // true
set.add("apple"); // false(已存在)
set.add(null); // true(可加一次 null)
怎么删除元素
使用 remove(Object o) 方法删除指定元素。若存在逻辑相等的元素,则移除并返回 true;否则返回 false。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 删除依据是
equals()判断,不是引用相等(即不要求是同一个对象实例) - 传入
null可删除集合中唯一的null元素 - 删除不存在的元素不会报错,只是返回
false
set.remove("apple"); // true
set.remove("banana"); // false(不存在)
set.remove(null); // true(如果之前添加过 null)
其他常用操作补充
除了增删,实际开发中常配合以下方法使用:
立即学习“Java免费学习笔记(深入)”;
-
contains(Object o):快速判断是否存在(同样依赖 equals + hashCode) -
size():获取当前元素个数 -
clear():清空所有元素 - 遍历推荐用增强 for 循环或迭代器,因 HashSet 无序,不保证遍历顺序

















