{"name":"集合","id":"编程语言-JAVA-高级-集合-集合","content":"# Java 集合体系\n\n## 1. 本质：集合的计算机科学定义\n\n**集合框架本质 = 数据组织结构 + 访问策略 + 约束规则**\n\n它解决三个根本问题：\n\n| 问题      | 本质                     |\n| ------- | ---------------------- |\n| 数据如何组织  | 数据结构                   |\n| 如何访问数据  | 访问语义（顺序 / 随机 / 优先级）    |\n| 如何保证一致性 | 约束规则（唯一性 / 有序性 / 并发安全） |\n\n因此：\n\n> 集合不是“容器”，而是**数据组织与访问策略的抽象统一接口体系**\n\n---\n\n## 2. 设计哲学：集合框架的架构思想\n\n### 2.1 接口优先（Interface First）\n\n行为抽象优于实现抽象：\n\n```\nCollection → List / Set / Queue\nMap（独立体系）\n```\n\n接口定义语义，不定义结构。\n\n---\n\n### 2.2 算法与数据结构分离\n\n* 数据存储结构\n* 操作算法\n* 迭代访问方式\n\n解耦。\n\n典型体现：\n\n| 抽象         | 作用     |\n| ---------- | ------ |\n| Iterator   | 统一遍历算法 |\n| Comparator | 外部排序策略 |\n| Comparable | 内部排序策略 |\n\n---\n\n### 2.3 组合优于继承\n\n多数实现：\n\n```\nSet 本质上 = Map 的包装\n```\n\n例：\n\n```\nHashSet → HashMap\nTreeSet → TreeMap\n```\n\n集合框架大量使用**委托 + 适配**。\n\n---\n\n### 2.4 行为一致性原则\n\n所有集合共享：\n\n* 迭代器协议\n* equals / hashCode 语义\n* fail-fast机制\n* 泛型类型约束\n\n统一行为模型。\n\n---\n\n## 3. 集合的结构分类（数据结构视角）\n\n### 3.1 按访问方式分类\n\n| 类型    | 访问模型  | 核心结构    |\n| ----- | ----- | ------- |\n| List  | 位置索引  | 数组 / 链表 |\n| Set   | 唯一性约束 | 哈希 / 树  |\n| Queue | 顺序消费  | 队列结构    |\n| Map   | 键值映射  | 哈希 / 树  |\n\n---\n\n### 3.2 按底层结构分类\n\n| 结构   | 特征   | 复杂度      |\n| ---- | ---- | -------- |\n| 动态数组 | 连续内存 | 读快写慢     |\n| 链表   | 非连续  | 插入快      |\n| 哈希表  | 散列定位 | 平均O(1)   |\n| 红黑树  | 平衡排序 | O(log n) |\n| 跳表   | 分层索引 | O(log n) |\n\n---\n\n### 3.3 按约束语义分类\n\n| 语义   | 实现机制          |\n| ---- | ------------- |\n| 有序   | 索引 / 树        |\n| 唯一   | equals + hash |\n| 优先级  | 比较器           |\n| 并发安全 | 锁 / CAS       |\n\n---\n\n## 4. 集合框架的统一抽象模型\n\n### 4.1 逻辑模型\n\n```\n数据单元\n   ↓\n结构组织\n   ↓\n访问策略\n   ↓\n一致性规则\n```\n\n---\n\n### 4.2 行为模型\n\n所有集合操作可归约为：\n\n```\n查询\n插入\n删除\n遍历\n比较\n```\n\n---\n\n## 5. List 体系：顺序存储模型\n\n### 5.1 抽象语义\n\n* 可重复\n* 有序\n* 按位置访问\n\n本质：\n\n```\nIndex → Element\n```\n\n---\n\n### 5.2 ArrayList 原理\n\n#### 本质\n\n动态扩容数组。\n\n#### 核心机制\n\n* 连续内存\n* 扩容复制\n* 随机访问\n\n#### 复杂度\n\n| 操作    | 复杂度    |\n| ----- | ------ |\n| get   | O(1)   |\n| add尾部 | 均摊O(1) |\n| 插入中间  | O(n)   |\n\n---\n\n### 5.3 扩容策略的工程意义\n\n扩容倍率 1.5：\n\n目标是平衡：\n\n```\n扩容次数\n内存浪费\n复制成本\n```\n\n这是典型：\n\n> 空间换时间的渐进优化策略\n\n---\n\n### 5.4 LinkedList 原理\n\n#### 本质\n\n双向链表。\n\n#### 特性\n\n| 优势       | 劣势       |\n| -------- | -------- |\n| 插入删除O(1) | 随机访问O(n) |\n| 不需要连续内存  | 缓存不友好    |\n\n---\n\n### 5.5 List 选择原则\n\n| 场景     | 选择         |\n| ------ | ---------- |\n| 高频查询   | ArrayList  |\n| 高频插入删除 | LinkedList |\n\n但现实中：\n\n> 绝大多数业务使用 ArrayList\n\n因为：\n\n* CPU缓存友好\n* 常数因子小\n\n---\n\n## 6. Map 体系：键值索引模型\n\n### 6.1 抽象语义\n\n```\nKey → Value\n```\n\n核心能力：\n\n* 快速定位\n* 唯一映射\n\n---\n\n### 6.2 HashMap 原理\n\n#### 结构\n\n```\n数组 + 链表 + 红黑树\n```\n\n#### 工作流程\n\n```\nhash(key)\n  ↓\n桶定位\n  ↓\n冲突解决\n```\n\n---\n\n### 6.3 哈希冲突解决策略\n\n| 方法  | 特点   |\n| --- | ---- |\n| 链表  | 简单   |\n| 红黑树 | 稳定性能 |\n\n转换条件：\n\n```\n链表长度 ≥ 8 且容量 ≥ 64\n```\n\n本质：\n\n> 在时间复杂度与空间成本之间动态平衡\n\n---\n\n### 6.4 负载因子设计思想\n\n默认 0.75。\n\n控制：\n\n```\n空间利用率\n冲突概率\n扩容频率\n```\n\n---\n\n## 7. Set 体系：唯一性约束模型\n\n本质：\n\n```\nMap 的 Key 集合\n```\n\n实现方式：\n\n```\nvalue = 固定对象\n```\n\n---\n\n## 8. 迭代器模型：遍历抽象\n\n### 8.1 设计目标\n\n统一访问不同结构。\n\n---\n\n### 8.2 Fail-Fast机制\n\n本质：\n\n```\n结构修改检测\n```\n\n实现：\n\n```\nmodCount 对比\n```\n\n意义：\n\n* 防止脏读\n* 防止结构破坏\n\n---\n\n## 9. 并发集合的设计哲学\n\n目标：\n\n```\n高并发\n低阻塞\n弱一致性\n```\n\n手段：\n\n| 技术       | 作用   |\n| -------- | ---- |\n| 分段锁      | 降低竞争 |\n| CAS      | 无锁更新 |\n| volatile | 可见性  |\n\n---\n\n## 10. 泛型系统的本质\n\n泛型是：\n\n```\n类型约束机制\n```\n\n核心目标：\n\n```\n编译期安全\n```\n\n---\n\n### PECS原则\n\n```\nProducer → extends\nConsumer → super\n```\n\n---\n\n## 11. equals 与 hashCode 的数学意义\n\n哈希表成立的前提：\n\n```\n相等 → 哈希相等\n```\n\n否则：\n\n定位错误。\n\n---\n\n## 12. 时间复杂度统一视角\n\n| 结构         | 查找       | 插入       |\n| ---------- | -------- | -------- |\n| ArrayList  | O(1)     | O(n)     |\n| LinkedList | O(n)     | O(1)     |\n| HashMap    | O(1)     | O(1)     |\n| TreeMap    | O(log n) | O(log n) |\n\n---\n\n## 13. 工程选型决策模型\n\n选择集合本质是选择：\n\n```\n时间复杂度\n内存占用\n并发模型\n访问模式\n```\n\n---\n\n### 决策流程\n\n```\n是否需要Key映射？\n    是 → Map\n    否 → 是否需要唯一？\n            是 → Set\n            否 → List\n```\n\n再判断：\n\n```\n是否排序\n是否并发\n是否高频插入\n```\n\n---\n\n## 14. 集合框架的核心工程思想总结\n\n1. 抽象优先\n2. 行为统一\n3. 结构可替换\n4. 渐进优化\n5. 时间空间权衡\n6. 一致性可控\n\n## 关联内容（自动生成）\n\n- [/编程语言/JAVA/JAVA 并发编程/并发集合.md](/编程语言/JAVA/JAVA并发编程/并发集合.md) 并发集合的实现原理与选型策略，包括 ConcurrentHashMap、CopyOnWriteArrayList 等高并发场景下的集合方案\n- [/编程语言/JAVA/高级/泛型.md](/编程语言/JAVA/高级/泛型.md) 泛型系统详解，包括类型约束机制、PECS 原则等集合框架的类型安全基础\n- [/算法与数据结构/散列表.md](/算法与数据结构/散列表.md) 哈希表底层原理，包括哈希函数、冲突解决策略等 HashMap 的理论基础\n- [/算法与数据结构/算法与数据结构.md](/算法与数据结构/算法与数据结构.md) 数据结构基础概念，包括时间复杂度分析、各类数据结构的特性对比\n- [/编程语言/JAVA/JVM/自动内存管理/调优.md](/编程语言/JAVA/JVM/自动内存管理/调优.md) HashSet 引发的内存溢出问题分析，涉及集合使用中的内存管理实践\n","metadata":"tags: ['Java', '数据结构', '设计模式', '并发编程', '泛型', '性能']","hasMoreCommit":true,"totalCommits":15,"commitList":[{"date":"2026-02-24T16:59:47+08:00","author":"MY","message":"doc(集合): 重构文档","hash":"f12dde2a3374b7cebc681915c8f30d9498c980b0"},{"date":"2026-01-08T11:52:55+08:00","author":"MY","message":"doc(java-collections): 重构文档","hash":"e0203004013ac1a831e58f218e6acaca027ed080"},{"date":"2025-09-21T14:03:43+08:00","author":"MY","message":"docs(mindmap): 统一思维导图根节点格式","hash":"44fc90fa0f22040d171dbf83cd6f2fd8c020444a"},{"date":"2024-11-18T15:00:13+08:00","author":"MY","message":"📦Java 基础","hash":"270332d69c4b80cb8600b368ecda389c7c95b038"},{"date":"2023-11-06T20:07:31+08:00","author":"MY","message":"✏集合&面向对象","hash":"1bc147d8eb110fdddea62531487b7c972fd29f15"},{"date":"2022-10-17T20:48:10+08:00","author":"MY","message":"✏️Map","hash":"e50b5c3f8d2492452074933ad046696c785f3fdd"},{"date":"2021-09-09T15:45:23+08:00","author":"cjiping","message":"📦整理 Java 集合","hash":"252c795143c74614225c05db16d40cdaded2b684"},{"date":"2021-01-22T08:52:26+08:00","author":"cjiping","message":"✏更新 Java 集合","hash":"82c6aa0a5091e8f6833701cb2ee88b1aec5b9db2"},{"date":"2021-01-21T19:32:24+08:00","author":"cjiping","message":"✏更新 Java 集合","hash":"8a20e3ea6d53fa525ded369f54bab4c12a095c7c"},{"date":"2020-09-23T13:40:12+08:00","author":"MY","message":"✏更新 Java 集合","hash":"4b1c1b27c91ff0294c6003b710ddd89c53c73abd"}],"createTime":"2019-08-02T11:59:43+08:00"}