深入 ensureCapacityInternal:ArrayList 扩容的第一道关卡

简介: `ensureCapacityInternal` 是 `ArrayList` 扩容的入口,首次添加元素时将最小容量设为10,避免频繁扩容。它区分默认构造与指定容量,优化性能,并为后续扩容提供准确容量需求,体现灵活性与效率的平衡设计。


ArrayListadd() 方法中,真正决定是否扩容的逻辑始于 ensureCapacityInternal(int minCapacity)。这个方法是扩容机制的入口点,负责处理初始容量设定和最小容量校准。


一、方法作用解析

private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }
    ensureExplicitCapacity(minCapacity);
}
  • minCapacity:表示当前需要的最小容量(通常是 size + 1)。
  • DEFAULTCAPACITY_EMPTY_ELEMENTDATA:无参构造时 elementData 的初始值(一个共享的空数组)。
  • DEFAULT_CAPACITY:常量,值为 10

关键逻辑

如果是首次添加元素(即使用无参构造创建的 ArrayList),则将 minCapacity 至少设为 10

例如:第一次 add()minCapacity = 1,但会被提升为 10

这解释了为什么 new ArrayList<>() 在第一次添加元素后,内部数组容量是 10,而不是 1。


二、为什么这样设计?

  1. 避免频繁小容量扩容
    若首次只分配 1 个位置,第二次就要扩容到 2,第三次到 3……效率极低。
    直接初始化为 10,可满足大多数轻量级场景,减少早期扩容次数。
  2. 区分“显式指定容量”与“默认构造”
  • new ArrayList<>(5)elementData 不等于 DEFAULTCAPACITY_EMPTY_ELEMENTDATA,不会强制设为 10;
  • new ArrayList<>():走默认逻辑,首次扩容至少 10。

三、后续流程:ensureExplicitCapacity

ensureCapacityInternal 最终调用 ensureExplicitCapacity(minCapacity),该方法会:

  • 检查 minCapacity 是否超过当前 elementData.length
  • 若超过,则触发真正的扩容(调用 grow() 方法,执行 1.5 倍扩容 + 数组拷贝)。

总结

ensureCapacityInternalArrayList 扩容机制中的智能预判层

  • 对默认构造的列表,首次扩容直接拉到 10,避免“一步一扩”;
  • 为后续的容量判断和实际扩容(grow)提供准确的 minCapacity 输入。

理解这一过程,有助于我们:

  • 合理预设初始容量(如已知要存 1000 条数据,就 new ArrayList<>(1000));
  • 避免因频繁扩容导致的性能抖动;
  • 更深入掌握 Java 集合类的设计哲学:在灵活性与效率之间取得平衡


相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
644 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
348 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155

热门文章

最新文章