hashset通过哈希表实现元素不重复,add()方法依据hashcode()和equals()判断重复,返回boolean值;支持无参构造、指定容量或基于集合初始化;不保证顺序,允许一个null。

Java 中 HashSet 通过哈希表实现,天然保证元素不重复。创建后调用 add() 方法添加元素,重复值会自动忽略,方法返回 false;成功添加则返回 true。
创建 HashSet 的几种常用方式
最常用的是直接使用无参构造器,或指定初始容量和加载因子(可选):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
// 默认构造:底层 HashMap 初始容量为 16,加载因子 0.75
HashSet<string> set = new HashSet();</string> -
// 指定初始容量(避免频繁扩容)
HashSet<integer> numbers = new HashSet(32);</integer> -
// 基于已有集合初始化(去重后放入新 HashSet)
List<string> list = Arrays.asList("a", "b", "a");<br>HashSet<string> setFromList = new HashSet(list); // 结果含 "a", "b"</string></string>
添加不重复元素的关键行为
HashSet 的 add(E e) 方法内部依赖对象的 hashCode() 和 equals() 方法判断是否重复:
- 先计算元素的 hashCode(),定位到哈希桶;
- 若桶中已有元素,再逐个调用 equals() 比较内容是否相等;
- 只有 hashCode 相同且 equals 返回 true,才视为重复,添加失败;
- 自定义类必须重写 hashCode() 和 equals(),否则即使内容相同也可能被当作不同元素(例如两个 new Person("张三"))。
验证添加结果与常见注意事项
可通过返回值或 size() 判断是否真正新增:
boolean added = set.add("hello"); // 第一次返回 true,第二次返回 falseSystem.out.println(set.size()); // 可确认当前唯一元素数量- HashSet 不保证顺序(JDK 8 后底层可能用红黑树优化,但遍历仍无序),如需有序请考虑 LinkedHashSet 或 TreeSet;
- 允许一个 null 元素(因为 null.hashCode() 被特殊处理),但不可存多个 null。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










