Java HashSet 类完全指南:操作、方法与集合论实战
Java HashSet 类
通过简洁示例探索 Java HashSet 类的创建、核心方法与实战集合运算。
HashSet 类属于 Java 集合框架,实现 Set 接口,提供基于哈希表的存储。
创建 HashSet
先导入 java.util.HashSet:
import java.util.HashSet;
再用指定容量和负载因子创建 HashSet:
HashSet<Integer> numbers = new HashSet<>(8, 0.75); // capacity=8, loadFactor=0.75
参数:
- capacity — 初始桶数(示例为 8)。
- loadFactor — 触发扩容的阈值(0.75 即 75% 满时扩容)。
使用默认值也很常见:
HashSet<Integer> numbers1 = new HashSet<>(); // capacity=16, loadFactor=0.75
HashSet 方法
以下为最常用方法:
add(T element)— 插入单个元素。addAll(Collection<? extends T> c)— 批量插入。remove(Object o)— 删除特定元素。removeAll(Collection<? extends Object> c)— 清除多个元素。contains(Object o)— 检查存在性。size()— 元素数量。clear()— 移除所有条目。clone()— 创建浅拷贝。isEmpty()— 判断是否为空。containsAll(Collection<? extends Object> c)— 子集检查。
插入元素
使用 add 和 addAll 示例:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumber = new HashSet<>();
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("HashSet: " + evenNumber);
HashSet<Integer> numbers = new HashSet<>();
numbers.addAll(evenNumber);
numbers.add(5);
System.out.println("New HashSet: " + numbers);
}
}
输出
HashSet: [2, 4, 6]
New HashSet: [2, 4, 5, 6]
访问元素
用 Iterator 遍历:
import java.util.HashSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("HashSet: " + numbers);
Iterator<Integer> iterate = numbers.iterator();
System.out.print("HashSet 迭代: ");
while(iterate.hasNext()) {
System.out.print(iterate.next() + ", ");
}
}
}
输出
HashSet: [2, 5, 6]
HashSet 迭代: 2, 5, 6,
移除元素
单个移除与清空:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("HashSet: " + numbers);
boolean removed = numbers.remove(5);
System.out.println("5 是否移除? " + removed);
boolean cleared = numbers.removeAll(numbers);
System.out.println("所有元素是否移除? " + cleared);
}
}
输出
HashSet: [2, 5, 6]
5 是否移除? true
所有元素是否移除? true
集合运算
HashSet 的批量方法支持经典集合论运算。
并集
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumbers = new HashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(3);
numbers.addAll(evenNumbers);
System.out.println("并集: " + numbers);
}
}
输出
并集: [1, 2, 3, 4]
交集
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
HashSet<Integer> evenNumbers = new HashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
evenNumbers.retainAll(primeNumbers);
System.out.println("交集: " + evenNumbers);
}
}
输出
交集: [2]
差集
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
primeNumbers.add(5);
HashSet<Integer> oddNumbers = new HashSet<>();
oddNumbers.add(1);
oddNumbers.add(3);
oddNumbers.add(5);
primeNumbers.removeAll(oddNumbers);
System.out.println("差集: " + primeNumbers);
}
}
输出
差集: [2]
子集检查
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
boolean isSubset = numbers.containsAll(primeNumbers);
System.out.println("primeNumbers 是 numbers 的子集? " + isSubset);
}
}
输出
primeNumbers 是 numbers 的子集? true
其他方法
| 方法 | 说明 |
|---|---|
clone() | 创建 Set 浅拷贝 |
contains() | 检查元素是否存在 |
isEmpty() | 空时返回 true |
size() | Set 元素数量 |
clear() | 移除所有元素 |
完整列表请参阅 官方 Java 文档。
为何使用 HashSet?
需随机访问时,HashSet 凭借哈希表底层提供 O(1) 性能。每个元素的 hashCode() 保证唯一性,防止重复。但 HashSet 非线程安全;并发使用需外部同步。
注意: 因 HashSet 非同步,多线程并发修改会破坏数据结构。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- 掌握 Java 集合算法:排序、打乱、搜索与更多实用操作
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除