HashSet提供四种构造方式:无参构造(默认容量16、负载因子0.75)、指定初始容量、指定容量与负载因子、基于现有集合初始化;底层基于HashMap,容量与负载因子影响扩容时机和性能。

Java 中 HashSet 的初始化和创建方式很灵活,关键看是否需要控制性能或已有数据。默认方式最简单,但预估数据量大时,指定初始容量能减少扩容开销。
常用构造方式
HashSet 提供了四种主要构造方法:
-
无参构造:
new HashSet()—— 使用默认容量 16 和加载因子 0.75 -
指定初始容量:
new HashSet(32)—— 容量设为 32,加载因子仍为默认 0.75 -
指定容量和加载因子:
new HashSet(32, 0.8f)—— 容量 32,加载因子调高到 0.8,延迟扩容(适合读多写少场景) -
基于已有集合初始化:
new HashSet(Arrays.asList("a", "b", "c"))或new HashSet(otherSet)
为什么关心初始容量和加载因子
HashSet 底层用 HashMap 实现,元素实际作为 key 存入。当元素数量超过 容量 × 加载因子 时,会触发扩容(容量翻倍),带来数组重建和 rehash 开销。
例如,默认容量 16、加载因子 0.75,第 13 个元素加入时就会扩容到 32。如果已知要存 100 个元素,直接写 new HashSet(128) 可避免多次扩容。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
初始化时的注意事项
- 容量参数是“桶”的数量,不是最大可存元素数;实际能高效存多少,还取决于哈希分布
- 加载因子不宜设得过高(如 >0.9),否则哈希冲突增多,查找变慢;也不宜过低(如
- 若用自定义对象作元素,必须重写
hashCode()和equals(),否则无法正确去重 - 从其他集合初始化时,原集合中的重复元素会被自动过滤(符合 Set 语义)
一行快速初始化(Java 9+)
如果只是临时测试或小数据,可用不可变集合辅助:
Set<string> set = new HashSet(Set.of("x", "y", "z"));</string>
注意:Set.of() 返回的是不可变集合,必须包装进新 HashSet 才能后续增删
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










