Java 集合框架源码核心解析

简介: Java集合框架源码核心解析,聚焦面试与实战高频点:ArrayList(动态数组、1.5倍扩容)、LinkedList(双向链表)、HashMap(数组+链表+红黑树、CAS不安全)、ConcurrentHashMap(CAS+synchronized线程安全),直击底层原理与性能本质。(239字)

Java 集合框架源码核心解析(面试+进阶必背)

我直接给你最核心、最常考、最实用的集合源码解析,不讲废话,全是工作和面试高频点,按这个学就能吃透集合底层。

一、先搞懂:集合框架整体结构

Collection(根接口)
├─ List  有序、可重复
│  ├─ ArrayList(数组)
│  ├─ LinkedList(双向链表)
│  └─ Vector(线程安全,弃用)
├─ Set   无序、不可重复
│  ├─ HashSet(HashMap 实现)
│  ├─ LinkedHashSet(链表+Hash)
│  └─ TreeSet(红黑树)
└─ Queue 队列

Map(键值对,根接口)
├─ HashMap(数组+链表+红黑树)
├─ ConcurrentHashMap(线程安全)
├─ LinkedHashMap(记录插入顺序)
└─ TreeMap(红黑树排序)

二、ArrayList 源码核心(高频)

1. 底层数据结构

底层是 Object 数组transient Object[] elementData

2. 初始化

  • 无参构造:初始是空数组 {}, 第一次 add 才扩容为 10
  • 有参构造:直接指定数组长度

3. 扩容机制(最重要)

  1. 扩容公式:新容量 = 旧容量 * 1.5
  2. 扩容方法:Arrays.copyOf()(底层调用 System.arraycopy)
  3. 扩容本质:创建新数组 → 复制元素 → 丢弃旧数组

4. 常用方法源码逻辑

  • add()
    1. 检查容量是否足够
    2. 不够就扩容
    3. 赋值元素
  • get()
    直接数组下标访问,O(1),极快
  • remove()
    后面元素向前移动,O(n),效率低

5. 特点总结

  • 优点:查询快、随机访问快
  • 缺点:插入/删除慢、线程不安全
  • 适用:读多写少

三、LinkedList 源码核心

1. 底层结构

双向链表,节点结构:

private static class Node<E> {
   
    E item;
    Node<E> next; // 后继
    Node<E> prev; // 前驱
}

2. 核心逻辑

  • add():只需修改节点引用,不用扩容,O(1)
  • get(int index)
    会遍历链表,O(n),比 ArrayList 慢很多
  • remove():修改节点引用,O(1)

3. 特点

  • 优点:增删快
  • 缺点:查询慢
  • 线程不安全

四、HashMap 源码(重中之重!面试 100% 问)

1. 底层结构

JDK 1.8+:数组 + 链表 + 红黑树

2. 关键参数

  • 初始容量:16
  • 加载因子:0.75
  • 扩容阈值:容量 * 加载因子
  • 树化阈值:链表长度 ≥ 8
  • 反树化阈值:树节点 ≤ 6

3. 哈希计算(源码精髓)

static final int hash(Object key) {
   
    int h;
    // 高16位 ^ 低16位,减少哈希冲突
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

下标计算:(数组长度 - 1) & hash

4. put 方法流程(背下来)

  1. 数组为空,第一次 put 才初始化容量 16
  2. 计算 hash,得到数组下标
  3. 下标无元素 → 直接插入
  4. 下标有元素 → 遍历链表
  5. 链表长度 ≥8 且数组长度≥64 → 转为红黑树
  6. 元素个数超过阈值 → 扩容 2 倍
  7. 覆盖旧值或新增成功

5. 扩容机制

  • 扩容为 原来的 2 倍
  • 重新计算所有元素下标
  • 高并发下会死循环(JDK1.7),1.8 修复但仍线程不安全

6. 总结

  • 线程不安全
  • 允许 key/value 为 null
  • 查询效率极高:O(1)
  • 链表过长会转为红黑树(O(logn))

五、ConcurrentHashMap 源码(线程安全)

1. JDK 1.7

  • 分段锁(Segment),默认 16 段
  • 锁粒度:段,并发度 16

2. JDK 1.8(重点)

  • 取消分段,改用 CAS + synchronized
  • 锁粒度:数组头节点,锁更细,并发更高
  • 底层:数组 + 链表 + 红黑树
  • 不允许 key/value 为 null

3. 为什么线程安全?

  • 读操作无锁(volatile 保证可见性)
  • 写操作:CAS 失败 → 加 synchronized 锁头节点

六、高频面试题(直接背答案)

1. ArrayList vs LinkedList

  • ArrayList:数组,查询快,增删慢
  • LinkedList:双向链表,查询慢,增删快

2. HashMap 1.7 vs 1.8

  • 1.7:数组+链表,头插法,扩容死链
  • 1.8:数组+链表+红黑树,尾插法,优化哈希

3. HashMap 为什么线程不安全?

  • 多线程 put 可能导致数据覆盖
  • JDK1.7 扩容会产生死循环

4. ConcurrentHashMap 如何保证安全?

1.8:CAS + synchronized 锁头节点 + volatile

5. 为什么 HashMap 加载因子是 0.75?

  • 空间与查询效率的平衡
  • 泊松分布,冲突概率最低

6. 链表为什么转红黑树?

  • 链表过长查询 O(n)
  • 红黑树查询 O(logn),提升效率

七、学习建议

  1. 优先掌握:HashMap、ArrayList(最常考)
  2. 看源码只看核心:put/get/扩容/树化
  3. 不用死磕全部代码,抓流程和思想
  4. 结合画图理解(数组+链表+红黑树)

总结

  • ArrayList:动态数组,1.5 倍扩容,查询快
  • LinkedList:双向链表,增删快
  • HashMap:1.8 数组+链表+红黑树,CAS 不安全
  • ConcurrentHashMap:1.8 CAS + synchronized 线程安全
目录
相关文章
|
2月前
|
存储 弹性计算 人工智能
阿里云特价服务器选购攻略:轻量云服务器抢购与云服务器特惠区别与选择指南参考
2026年阿里云为不同预算用户提供了多层次的特价云服务器方案。轻量应用服务器主打极致性价比,38元/年(2核2G/200M带宽)和9.9元/月起(2核4G/200M带宽)两款限时抢购,适合个人建站、开发测试及AI应用快速部署。云服务器ECS则提供99元/年经济型e实例(2核2G/3M固定带宽)和199元/年通用算力型u1实例(2核4G/5M固定带宽),均支持新购续费同价,适合企业长期稳定运行。
阿里云特价服务器选购攻略:轻量云服务器抢购与云服务器特惠区别与选择指南参考
|
2月前
|
存储 物联网 BI
RFID车辆无感识别通行效率秒过
RFID车辆无感识别基于射频技术,通过车载电子标签与读写器毫秒级通信,实现3–10米远距离、非接触、免停车自动核验,通行仅需1–2秒,识别率≥99.9%,支持智慧停车、园区门禁、高速ETC等多场景,真正“秒过”无忧。(238字)
|
2月前
|
机器学习/深度学习 弹性计算 编解码
ecs.c9i.2xlarge——阿里云8核16G云服务器ECS计算型c9i实例,新一代企业级x86计算架构
阿里云ECS全新计算型c9i实例(8核16G),基于CIPU架构,搭载Intel Xeon 6982P-C处理器,兼顾高性能计算、高网络吞吐与安全可信能力,适用于机器学习推理、数据分析、视频编码等场景。阿里云服务器ECS官网:https://t.aliyun.com/U/AZBUsA
346 122
|
2月前
|
存储 弹性计算 负载均衡
阿里云服务器ECS巨型帧是什么?Jumbo Frames支持ECS实例规格、MTU及开启关闭指南
阿里云ECS巨型帧(Jumbo Frames)支持8500字节超大MTU,可减少数据包数量、降低CPU负载、提升吞吐与大块数据传输效率。g8i/c8i/r8i及全部9代及以上实例默认支持。详细参考云服务器ECS官网解读:https://t.aliyun.com/U/AZBUsA
297 1
|
2月前
|
人工智能 算法 中间件
意图共鸣科技《认知智能白皮书》——记忆主权到认知主权:认知操作系统(COS)的底层逻辑
本文提出“认知操作系统”(COS)——一种运行于大模型之上的智能中间件,专司AI对人情世故、分寸边界与潜规则的理解与响应。它守护用户“认知主权”,强调透明、可审计、可参与的进化机制,并以数学化方式锁死生命安全等文明底线。
288 1
|
2月前
|
人工智能 JSON 测试技术
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
本文探讨接口自动化测试的范式升级:从低效脚本维护转向AI驱动的“技能(Skills)”模式。指出脚本堆积不等于测试能力,核心在于沉淀可推理的业务规则与契约。通过三层机制(业务知识层、策略生成层、执行反馈层),实现从“执行指令”到“理解意图”的跃迁。强调测试工程师的新价值——定义“如何测”,而非写多少行代码。
|
2月前
|
缓存 前端开发 JavaScript
B2C跨境独立站转化率优化:前端交互体验的技术拆解与落地
B2C跨境独立站常陷“高流量、低转化”困局:曝光足、访客多,但弃单率高、成交少。根源常被误判,实则在于前端技术硬伤——加载慢、流程繁、支付窄、适配差。阿里云专业独立站以云端架构精准优化:极速加载、游客一键下单、全区域支付+物流透明、全端自适应,零开发即享高转化。(239字)
149 0
|
2月前
|
运维 算法 安全
零基础个人跨境出海:零技术SaaS建站的轻量化落地逻辑
跨境电商公域内卷加剧,个人创业者生存艰难。轻量化SaaS云建站依托阿里云技术,零代码、低投入、私有资产、极简运维,助力零基础者快速搭建合规独立站,自主经营、沉淀客户、长效获客,是副业出海最优解。(239字)
248 0