Java Set 集合
Set 是 Java 集合框架中用于存储唯一 元素的接口。理解 Set 的实现类和使用方法是处理不重复数据的基础。本章将详细介绍 Java 中的 Set 集合。
HashSet、LinkedHashSet、TreeSet
HashSet
**HashSet**是基于哈希表实现的,使用 HashMap 作为底层存储。
特点:
- 无序:元素没有固定顺序
- 唯一性:不允许重复元素
- 查找快:平均时间复杂度 O(1)
- 线程不安全:多线程环境下需要同步
import java.util.HashSet;
import java.util.Set;
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("apple"); // 重复元素,不会添加
System.out.println(set); // [banana, orange, apple](顺序不确定)
System.out.println(set.size()); // 3
LinkedHashSet
**LinkedHashSet**是 HashSet 的子类,使用链表维护插入顺序。
特点:
- 有序:保持插入顺序
- 唯一性:不允许重复元素
- 查找快:平均时间复杂度 O(1)
- 性能略低:比 HashSet 略慢(需要维护链表)
import java.util.LinkedHashSet;
Set<String> set = new LinkedHashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("apple"); // 重复元素,不会添加
System.out.println(set); // [apple, banana, orange](保持插入顺序)
TreeSet
**TreeSet**是基于红黑树实现的,元素按自然顺序或指定比较器排序。
特点:
- 有序:元素自动排序
- 唯一性:不允许重复元素
- 查找较慢:时间复杂度 O(log n)
- 支持范围查询:可以高效查询范围内的元素
import java.util.TreeSet;
Set<String> set = new TreeSet<>();
set.add("orange");
set.add("apple");
set.add("banana");
System.out.println(set); // [apple, banana, orange](自动排序)