《ArrayList的初始化和扩容源代码解读》
1. 构造方法的源代码解读(1)无参构造public ArrayList() { this.elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }将elementData初始化为一个空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是一个空数组{}用于标记“尚未真正初始化”此时底层数组长度为 0不会分配默认容量 10真正的容量10会在第一次调用 add() 时通过扩容机制分配(2)指定初始容量的构造方法public ArrayList(int initialCapacity) { if (initialCapacity 0) { this.elementData new Object[initialCapacity]; } else if (initialCapacity 0) { this.elementData EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException(Illegal Capacity: initialCapacity); } }初始容量 0创建指定大小的数组初始容量 0使用空数组EMPTY_ELEMENTDATA初始容量 0抛出IllegalArgumentException异常(3)使用集合构造public ArrayList(Collection? extends E c) { elementData c.toArray(); if ((size elementData.length) ! 0) { if (elementData.getClass() ! Object[].class) elementData Arrays.copyOf(elementData, size, Object[].class); } else { // replace with empty array. this.elementData EMPTY_ELEMENTDATA; } }将集合转为Object数组赋值给elementData处理c.toArray()可能返回非Object[]类型的情况如果集合为空初始化为空数组2. add()方法的源代码解读public boolean add(E e) { ensureCapacityInternal(size 1); //确保容量足够 elementData[size] e; //添加元素 return true; }计算最小所需容量private static int calculateCapacity(Object[] elementData, int minCapacity) { //如果是无参构造的默认空数组直接返回默认容量10 if (elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { return Math.max(DEFAULT_CAPACITY, minCapacity); } return minCapacity; }若是首次添加底层数组为 DEFAULTCAPACITY_EMPTY_ELEMENTDATA也就是为空则 minCapacity 至少为 DEFAULT_CAPACITY即 10确保底层数组有足够的内部容量private void ensureCapacityInternal(int minCapacity) { ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); }接着调用 ensureExplicitCapacity()判断是否需要扩容private void ensureExplicitCapacity(int minCapacity) { modCount; // 最小所需容量 底层数组当前长度 → 容量不足触发扩容 if (minCapacity - elementData.length 0) grow(minCapacity); }3. grow()方法的源代码解读private void grow(int minCapacity) { // 获取当前底层数组的旧容量 int oldCapacity elementData.length; int newCapacity oldCapacity (oldCapacity 1);//扩容1.5倍 if (newCapacity - minCapacity 0) newCapacity minCapacity;当1.5倍扩容后仍小于所需最小容量时直接使用所需最小容量if (newCapacity - MAX_ARRAY_SIZE 0) newCapacity hugeCapacity(minCapacity);//处理大容量 elementData Arrays.copyOf(elementData, newCapacity); }MAX_ARRAY_SIZE Integer.MAX_VALUE - 8超过则调用 hugeCapacity()

相关新闻

为什么需要react-merge-refs?解决React组件开发中的refs冲突难题

为什么需要react-merge-refs?解决React组件开发中的refs冲突难题

为什么需要react-merge-refs?解决React组件开发中的refs冲突难题 【免费下载链接】react-merge-refs React utility to merge refs 🖇 项目地址: https://gitcode.com/gh_mirrors/re/react-merge-refs 在React组件开发中,refs是连接DO…

2026/8/18 10:18:47 阅读更多 →
MML文件完全攻略:CartoCSS项目的核心配置与数据源管理

MML文件完全攻略:CartoCSS项目的核心配置与数据源管理

MML文件完全攻略:CartoCSS项目的核心配置与数据源管理 【免费下载链接】carto fast CSS-like map stylesheets 项目地址: https://gitcode.com/gh_mirrors/ca/carto MML(Map Markup Language)文件是CartoCSS项目的核心配置文件&#x…

2026/8/18 20:01:24 阅读更多 →
让AI告别模板脸:Taste-Skill前端设计规范实战指南

让AI告别模板脸:Taste-Skill前端设计规范实战指南

让AI告别模板脸:Taste-Skill前端设计规范实战指南 【免费下载链接】taste-skill Taste-Skill - gives your AI good taste. stops the AI from generating boring, generic slop 项目地址: https://gitcode.com/GitHub_Trending/ta/taste-skill 让 AI 写一个…

2026/8/19 8:03:24 阅读更多 →

最新新闻

Go对比Python asyncio,GPT-Live语音p95降至p50

Go对比Python asyncio,GPT-Live语音p95降至p50

将媒体前端用Go进行重写, GPT - Live语音的p95延迟直接降低到原系统的p50水平。历经六个月开发出第三代语音系统, 这第三代语音系统把turn从音频链路里完全剔除出去。下面这套架构成功地将推理延迟压制到了亚秒这个级别, 你到下半年通过使得 Agent 去运行长任务或者充当开展实时…

2026/8/19 11:07:53 阅读更多 →
基于ESP8266的百元级智能风扇DIY:从硬件选型到固件开发全解析

基于ESP8266的百元级智能风扇DIY:从硬件选型到固件开发全解析

1. 项目缘起:为什么我要自己动手做一台智能风扇?去年夏天,我卧室里那台服役多年的老风扇彻底罢工了。去商场转了一圈,发现带智能功能(比如手机控制、温湿度联动)的风扇,价格直接翻了好几倍&…

2026/8/19 11:07:53 阅读更多 →
Python 企业级自动化运维:服务器、数据库、监控、告警全自动化

Python 企业级自动化运维:服务器、数据库、监控、告警全自动化

解放运维涵盖, 服务器管理, 此管理涉及 SSH/方面, 还有数据库备份恢复工作, 以及日志分析、监控告警、配置变更、自动化巡检、故障自愈、报表生成、任务调度/这些内容。其技术包含, Redis Shell。解放运维:多维度的运维工作与关键技术支撑于当下数字化时期, 高…

2026/8/19 11:07:53 阅读更多 →
汽车行业变革下研发部门出售的驱动逻辑与员工应对策略

汽车行业变革下研发部门出售的驱动逻辑与员工应对策略

1. 从一则内部抗议说起:当“出售”成为悬在企业头顶的剑 最近,汽车圈里一则来自欧洲的消息引起了我的注意。不是关于某款新车的发布,也不是关于某项前沿技术的突破,而是一则关于企业内部动荡的新闻:欧宝(Op…

2026/8/19 11:07:53 阅读更多 →
拆解Deepseek Harness(一):一切皆可插件

拆解Deepseek Harness(一):一切皆可插件

DeepSeek Harness开源之后热度极速上升,主要源于其一切皆可插件的概念,市面上的主流Agent,如Claude Code ,Cursor等都是将Agent Loop,上下文管理,工具,Memory 等跟框架深度绑定,只支…

2026/8/19 11:07:53 阅读更多 →
Arduino蓝牙控制LED点阵屏:从硬件连接到滚动显示全解析

Arduino蓝牙控制LED点阵屏:从硬件连接到滚动显示全解析

1. 项目概述:一个能“说话”的蓝牙像素矩阵 最近在工作室捣鼓一个互动装置,核心想法很简单:做一个能通过手机蓝牙控制的LED点阵屏,让它不仅能显示静态图案,还能滚动播放我发送过去的任何文字。听起来像是智能家居里那种…

2026/8/19 11:06:53 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →