DSP28335 GPIO输入实战:用2x2矩阵按键控制LED,手把手教你从硬件原理到代码调试
2026/5/10 14:54:10
Java集合框架(Java Collections Framework)核心组件与使用场景详解
Java集合框架是Java开发中最核心、最常用的工具之一,位于java.util包下。它提供了一套统一的接口、实现类和算法,用于高效存储、检索、操作对象集合。
核心分为两大体系:
Collection(单值集合) ← 根接口
子接口:List、Set、Queue(Deque)
Map(键值对集合) ← 独立体系(不继承Collection)
常用核心组件概览表:
| 类型 | 接口 | 是否有序 | 是否允许重复 | 是否线程安全 | 代表实现类 | 底层数据结构 | 随机访问 | 插入/删除效率 | 查找效率 | 主要使用场景 |
|---|---|---|---|---|---|---|---|---|---|---|
| 列表 | List | 是 | 是 | 否 | ArrayList | 动态数组 | O(1) | O(n) | O(1) | 最常用、频繁随机访问 |
| 列表 | List | 是 | 是 | 否 | LinkedList | 双向链表 | O(n) | O(1) | O(n) | 频繁头尾增删、实现队列/栈 |
| 列表 | List | 是 | 是 | 否 | Vector/Stack(遗留类) | 动态数组(同步) | O(1) | O(n) | O(1) | 极少用(已被ArrayList+Collections代替) |
| 集合 | Set | 否 | 否 | 否 | HashSet | HashMap(key) | — | O(1)平均 | O(1)平均 | 快速去重、存在性判断 |
| 集合 | Set | 插入顺序 | 否 | 否 | LinkedHashSet | HashMap + 双向链表 | — | O(1) | O(1) | 去重 + 保持插入顺序 |
| 集合 | Set | 排序 | 否 | 否 | TreeSet | 红黑树(TreeMap) | — | O(log n) | O(log n) | 自动排序、范围查询 |
| 映射 | Map | 否 | key唯一 | 否 | HashMap | 数组 + 链表 + 红黑树(JDK8+) | — | O(1)平均 | O(1)平均 | 最常用键值对存储 |
| 映射 | Map | 插入顺序 | key唯一 | 否 | LinkedHashMap | HashMap + 双向链表 | — | O(1) | O(1) | 按插入/访问顺序(LRU缓存) |
| 映射 | Map | 键排序 | key唯一 | 否 | TreeMap | 红黑树 | — | O(log n) | O(log n) | 按键排序、范围查找、字典序 |
| 并发映射 | Map | 否 | key唯一 | 是 | ConcurrentHashMap(推荐) | 数组 + 链表 + 红黑树 + 分段锁/CAS | — | O(1)平均 | O(1)平均 | 高并发读写场景(首选) |
| 队列 | Queue | 是 | 是 | 否 | PriorityQueue | 堆 | — | O(log n) | O(1)取顶 | 优先级任务调度、Dijkstra算法 |
| 双端队列 | Deque | 是 | 是 | 否 | ArrayDeque | 循环数组 | — | O(1) | O(1) | 队列/栈、滑动窗口 |
推荐替代方案:当明确知道元素数量时,可用new ArrayList<>(预计容量)避免多次扩容。
现代建议:队列/栈首选ArrayDeque(性能更好)
现代注意:
new HashMap<>(预计大小 / 0.75f + 1)添加链接描述Java 8+ 推荐:几乎所有并发Map场景都用ConcurrentHashMap
你需要存储什么? ├── 键值对(key-value) │ ├── 需要线程安全? → ConcurrentHashMap │ ├── 需要按键排序? → TreeMap │ ├── 需要插入/访问顺序? → LinkedHashMap(LRU用access-order) │ └── 普通键值对 → HashMap(99%场景) └── 单个元素集合 ├── 允许重复 + 需要顺序/索引? │ ├── 频繁随机访问/尾插 → ArrayList │ └── 频繁头尾操作 → ArrayDeque > LinkedList ├── 不允许重复? │ ├── 需要排序 → TreeSet │ ├── 需要保持插入顺序 → LinkedHashSet │ └── 普通去重 → HashSet └── 优先级队列 / 延迟任务 → PriorityQueueList<String> list = new ArrayList<>();List.of()、Set.of()、Map.of()(Java 9+)for-each或stream()+parallelStream()(谨慎使用并行流)希望这份总结能帮助你系统掌握Java集合框架,并能在实际项目和面试中快速做出最合适的选择!
有具体集合想深入源码(比如HashMap的put/resize、ConcurrentHashMap的分段锁演进),或者想看某个场景的代码示例,欢迎继续提问~