Skip to content

03 — 集合框架索引

定位: Java 最核心的 API 体系之一 — 数据结构的接口/实现分离设计 面试高频度: ⭐⭐⭐⭐⭐

一、板块在体系中的位置

┌─────────────────────────────────────────────────────────────┐
│                 集合框架在 Java 中的角色                       │
│                                                              │
│   02-面向对象核心  (接口/实现分离的设计哲学)                    │
│       │                                                      │
│       ▼                                                      │
│   03-集合框架 ← 在这里                                        │
│   Collection / Map 两大分支 → 日常开发最高频使用的 API          │
│       │                                                      │
│       ├──→ 04-泛型 (集合大量使用泛型 — 类型安全的容器)          │
│       ├──→ 07-Lambda/Stream (集合的批量操作)                  │
│       └──→ 08-多线程/并发 (并发集合—ConcurrentHashMap/...)    │
└─────────────────────────────────────────────────────────────┘

二、知识全景图

┌─────────────────────────────────────────────────────────────┐
│                  Java 集合框架全景图                           │
│                                                              │
│                     ┌── Iterable ──┐                         │
│                     │              │                         │
│                  Collection        │                         │
│                ┌──────┼──────┐     │                         │
│                │      │      │     │                         │
│               List   Set   Queue   Map (独立体系)             │
│                │      │      │     │                         │
│   ┌── ArrayList  HashSet  Deque    HashMap                    │
│   ├── LinkedList  Linked  ArrayD   LinkedHashMap              │
│   └── Vector      TreeSet  PriQue  TreeMap                    │
│                                                              │
│   ┌──── 并发集合 ────────────────────────────────────┐      │
│   │  CopyOnWriteArrayList  ConcurrentLinkedQueue      │      │
│   │  ConcurrentHashMap     BlockingQueue (各种)       │      │
│   └──────────────────────────────────────────────────┘      │
│                                                              │
│   核心考点:                                                   │
│   ① HashMap 数据结构 + put/get 流程 + 扩容 + 红黑树          │
│   ② ConcurrentHashMap 线程安全实现 (JDK7→8 演进)             │
│   ③ ArrayList vs LinkedList 选择                            │
│   ④ Comparable vs Comparator 排序                           │
└─────────────────────────────────────────────────────────────┘

三、子专题导航

#主题面试频率核心内容
**List体系**List体系⭐⭐⭐⭐ArrayList/LinkedList 数据结构对比、扩容机制、随机访问 vs 顺序访问
**HashMap核心原理**HashMap核心原理⭐⭐⭐⭐⭐哈希表设计动机、put/get 全流程、扩容树化、hash 扰动
**ConcurrentHashMap**ConcurrentHashMap⭐⭐⭐⭐⭐分段锁→CAS+synchronized 演进、并发安全读写
**Set与Queue**Set与Queue⭐⭐⭐HashSet 去重原理、TreeSet 排序、Queue 各实现对比

四、核心考点速记

考点 1:HashMap put 流程(JDK 8)

put(key, value)

  ├── hash(key) → 扰动函数 (高16位 ^ 低16位)

  ├── (n-1) & hash → 计算桶位置

  ├── 桶为空 → 直接放入

  ├── 桶不为空 → 判断 key 是否 equals
  │   ├── 相等 → 替换 value
  │   └── 不等 → 链表遍历 / 红黑树查找

  └── 元素数 > 阈值(8) → 链表树化(红黑树)
  
  ⚠️ 扩容触发:size > capacity * loadFactor(0.75)
     扩容为 2 倍 → 元素重新散列

考点 2:ArrayList vs LinkedList

维度ArrayListLinkedList
底层结构动态数组双向链表
随机访问 get(i)O(1)O(n)
尾部插入O(1) 均摊O(1)
中间插入/删除O(n) 移动元素O(1) 改指针
内存连续紧凑每个节点额外存前后指针
适用场景查询多、尾部追加频繁头尾插入删除

五、面试高频追问一览

追问关联笔记频次
HashMap 扩容为什么是 2 的幂次?**HashMap核心原理**⭐⭐⭐⭐⭐
红黑树为什么比链表好?阈值为什么是 8?**HashMap核心原理**⭐⭐⭐⭐⭐
ConcurrentHashMap 的 size() 怎么实现的?**ConcurrentHashMap**⭐⭐⭐⭐
ArrayList 的扩容因子是多少?**List体系**⭐⭐⭐⭐

📚 相关文件

  • **02-OOP核心** — 集合框架的设计哲学
  • **泛型注解索引** — 集合中的泛型应用
  • **Lambda索引** — Stream 对集合的批量操作
  • **Java文库设计文档** — 返回总纲

Knowledge4J — Java 知识库