hashset通过哈希表实现元素不重复,add()添加重复元素返回false;需重写自定义类的hashcode()和equals();支持无参构造、指定容量及jdk10+的set.of()(不可变);不保证顺序且线程不安全。

Java 中 HashSet 通过哈希表实现,天然保证元素不重复。创建后调用 add() 方法添加元素,重复值会自动被忽略,方法返回 false。
创建 HashSet 实例
最常用方式是使用无参构造函数,底层基于 HashMap(键为元素,值为固定对象):
- HashSet
set = new HashSet(); - 也可指定初始容量或负载因子,如:new HashSet(16, 0.75f)
- JDK 10+ 支持静态工厂方法:Set
set = Set.of(1, 2, 3); (但该集合不可变)
添加不重复元素
调用 add(E e) 即可。HashSet 通过 hashCode() 定位桶位置,再用 equals() 判断是否已存在:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 若元素为自定义类(如 Person),必须重写 hashCode() 和 equals(),否则相同逻辑对象可能被当作不同元素重复添加
- 基本类型和 String、Integer 等包装类已内置正确实现,可直接使用
- 示例:set.add("apple"); set.add("apple"); // 第二次添加返回 false,集合仍只有 1 个元素
验证是否添加成功
add() 方法返回 boolean 值,可用于判断本次操作是否真正新增了元素:
- if (set.add("banana")) { System.out.println("新增成功"); }
- 也可用 set.contains("xxx") 主动检查是否存在
- 注意:null 允许添加且只允许一个,set.add(null) 多次调用也只保留一个
常见注意事项
避免踩坑的关键点:
- HashSet 不保证迭代顺序(如需有序,改用 LinkedHashSet;如需排序,用 TreeSet)
- 线程不安全,多线程环境下需手动同步(如用 Collections.synchronizedSet)或选用 CopyOnWriteArraySet
- 添加过程不会抛异常,即使传入 null 或重复值,只是 quietly 忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










