精通 Java Set 接口:概念、方法与实战示例
精通 Java Set 接口
探索 Java Set 接口如何消除重复、核心方法及在 HashSet、TreeSet 等中的实战应用。
Java 集合框架中的 Set 接口建模数学集合:不包含重复元素的集合。它扩展 Collection 接口,继承所有标准操作并新增少量 Set 专用工具。
实现 Set 的类
因 Set 是接口,需实例化具体实现:
- HashSet — 无序、高性能、基于哈希。
- LinkedHashSet — 保留插入顺序。
- EnumSet — 专为枚举类型设计的高性能 Set。
- TreeSet — 基于自然顺序或比较器的排序 Set。
这些类均位于 java.util 包,均满足 Set 契约。
Set 的子接口
Set 接口进一步扩展为:
- SortedSet — 增加有序集合导航方法。
- NavigableSet — 扩展 SortedSet,提供更高层导航方法。
代码中使用 Set
导入 java.util.Set 并选择实现:
import java.util.Set;
import java.util.HashSet;
Set<String> animals = new HashSet<>();
此处 animals 为字符串 Set,底层由 HashSet 支撑。实现选择取决于排序、性能及用例需求。
Set 的核心方法
Set 接口继承所有 Collection 方法,并新增以下常用方法:
- add(element) — 元素不存在时插入。
- addAll(collection) — 批量添加另一集合元素。
- iterator() — 提供顺序迭代器。
- remove(element) — 移除特定元素。
- removeAll(collection) — 移除指定集合中出现的所有元素。
- retainAll(collection) — 仅保留也在指定集合中的元素。
- clear() — 清空 Set。
- size() — 返回元素数量。
- toArray() — 转换为数组。
- contains(element) — 检查成员资格。
- containsAll(collection) — 验证给定集合所有元素是否均存在。
- hashCode() — 生成 Set 的哈希码。
完整参考请查阅官方 Java Set 文档。
集合运算
Java Set 通过简单方法支持经典数学集合运算:
- 并集 —
x.addAll(y)合并两个 Set。 - 交集 —
x.retainAll(y)仅保留共同元素。 - 子集 —
y.containsAll(x)检查x是否为y的子集。
实战实现示例
1. 使用 HashSet
import java.util.Set;
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
set1.add(2);
set1.add(3);
System.out.println("Set1: " + set1);
Set<Integer> set2 = new HashSet<>();
set2.add(1);
set2.add(2);
System.out.println("Set2: " + set2);
set2.addAll(set1); // 并集
System.out.println("并集: " + set2);
}
}
输出
Set1: [2, 3] Set2: [1, 2] 并集: [1, 2, 3]
更多请见 Java HashSet。
2. 使用 TreeSet
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;
public class TreeSetDemo {
public static void main(String[] args) {
Set<Integer> numbers = new TreeSet<>();
numbers.add(2);
numbers.add(3);
numbers.add(1);
System.out.println("TreeSet: " + numbers);
System.out.print("iterator() 遍历: ");
Iterator<Integer> it = numbers.iterator();
while (it.hasNext()) {
System.out.print(it.next() + ", ");
}
}
}
输出
TreeSet: [1, 2, 3] iterator() 遍历: 1, 2, 3,
深入了解请访问 Java TreeSet。
这些示例展示了如何在实际应用中发挥 Set 接口的威力。后续教程将单独探讨 EnumSet 和 LinkedHashSet 等其他实现。
java
- 掌握 C# 接口:定义、实现与实战场景全解析
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java super 关键字:高级用法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- 掌握 Java NavigableSet 接口:导航、排序与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 10 开发环境搭建:构建、编译与运行完全指南
- Java 9 接口私有方法:增强封装与代码复用