集合(Set)和映射(Map)是两种最基础的抽象数据类型。理解它们的底层实现(哈希表 vs 搜索树)是选择正确数据结构的关键。
一、集合 Set
Mermaid · 渲染中(下方为源码)
graph LR A[Set/Map] --> B[哈希实现 O(1)] A --> C[树实现 O(log n) 有序]
集合存储不重复的元素,核心操作:add、remove、contains。
有序集合 vs 无序集合
| 实现 | 底层结构 | 有序性 | 时间复杂度 | Java 类 |
|---|---|---|---|---|
| 哈希集合 | 哈希表 | 无序 | O(1) 平均 | HashSet |
| 树集合 | 红黑树 | 有序 | O(log n) | TreeSet |
// HashSet:O(1) 判重
Set<Integer> set = new HashSet<>();
set.add(3); set.add(1); set.add(3); // 重复不生效
System.out.println(set.contains(3)); // true
System.out.println(set.size()); // 2
// TreeSet:自动排序
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(5); treeSet.add(2); treeSet.add(8);
System.out.println(treeSet.first()); // 2
System.out.println(treeSet.last()); // 8
System.out.println(treeSet.ceiling(3)); // 5(>=3 的最小值)