Java 算法题中常用数据结构
以下是 Java 算法题中常用数据结构的详细对比表格,涵盖适用场景、底层实现、时间复杂度等关键维度:
| 数据结构 | 适用场景 | 底层实现 | 插入/添加 | 删除 | 查找 | 空间复杂度 | 特点与注意 |
|---|---|---|---|---|---|---|---|
ArrayList |
频繁按索引访问、元素数量动态增长但不频繁删除 | 动态数组(基于数组) | O(1)(尾部) O(n)(中间) |
O(n)(需移动元素) | O(1)(按索引) O(n)(按值) |
O(n) | 支持随机访问;扩容时性能有波动 |
LinkedList |
频繁在头部/尾部插入/删除,不依赖索引访问 | 双向链表 | O(1)(头/尾) O(n)(中间) |
O(1)(已知节点) | O(n)(需遍历) | O(n) | 适合队列/栈实现;内存开销大 |
HashMap |
快速查找键值对、去重、统计频次 | 哈希表 + 链表/红黑树(JDK8+) | O(1) 平均 O(n) 最坏 |
O(1) 平均 O(n) 最坏 |
O(1) 平均 O(n) 最坏 |
O(n) | 哈希冲突影响性能;避免自定义类未重写 equals()/hashCode() |
HashSet |
去重、集合运算(并集/交集)、快速判断存在性 | 基于 HashMap(key 为元素) |
O(1) 平均 | O(1) 平均 | O(1) 平均 | O(n) | 无重复元素;不可排序 |
TreeMap |
需要有序键值对、范围查询、前驱/后继操作 | 红黑树(平衡二叉搜索树) | O(log n) | O(log n) | O(log n) | O(n) | 自动排序;支持 floorKey()、ceilingKey() 等方法 |
TreeSet |
排序去重、查找上下界、区间操作 | 基于 TreeMap |
O(log n) | O(log n) | O(log n) | O(n) | 有序集合;不能有重复元素 |
PriorityQueue |
优先级调度、堆顶最大/最小、Top-K 问题 | 二叉堆(数组实现) | O(log n) | O(log n) | O(1)(获取堆顶) O(n)(删除非堆顶) |
O(n) | 无序存储;默认小根堆,可自定义比较器 |
Stack(Deque 实现) |
括号匹配、表达式求值、递归模拟 | ArrayDeque(双端队列) |
O(1) | O(1) | O(1) | O(n) | 用 ArrayDeque 实现更高效;避免使用 Vector |
Queue(ArrayDeque) |
层序遍历、广度优先搜索(BFS)、滑动窗口 | 数组环形队列 | O(1) | O(1) | O(1) | O(n) | 高效且线程不安全;推荐用于算法题 |
✅ 使用建议(面试 & 刷题场景)
- 频繁查找/更新 →
HashMap/HashSet - 需要有序性 →
TreeMap/TreeSet - 维护最大/最小值 →
PriorityQueue - 按顺序访问或频繁尾插尾删 →
ArrayList - 频繁头尾增删 →
LinkedList(但多数情况下ArrayDeque更优) - 栈/队列逻辑 → 用
ArrayDeque模拟,比Stack/Queue更高效
💡 提示:在 LeetCode 中,
ArrayDeque是Stack/Queue的首选实现。

浙公网安备 33010602011771号