当前位置: 首页 > news >正文

ArrayList 扩容机制:

ArrayList 的底层是一个Object[]数组。扩容的本质就是创建一个新的、容量更大的数组,然后将原数组中的元素复制到新数组中,最后让 ArrayList 内部的数组引用指向这个新数组

具体来说,

初始化:

  • 如果使用无参构造器new ArrayList<>()),在JDK 1.8及以后,初始容量是0,而不是10(JDK 1.7)。
  • 只有在第一次调用add()方法时,会通过grow()方法将容量懒加载为默认的10
  • 当然,也可以使用带初始容量的构造器(new ArrayList<>(int initialCapacity))来指定初始大小。

扩容时机:
当调用add()方法添加元素,且当前元素个数(size) + 1> 当前内部数组的长度时,就会触发扩容。

扩容计算:

  • ArrayList扩容的计算是在一个grow()方法里面,grow方法先尝试将数组扩大为原数组的1.5倍。

边界处理:

  • 如果 1.5 倍后的容量仍然小于所需的最小容量(例如addAll一次性加入大量元素),那么新容量直接取所需的最小容量
  • 如果新容量超过了定义的最大数组长度(MAX_ARRAY_SIZE),则会进行hugeCapacity()处理,最终可能将容量设为Integer.MAX_VALUE或者 抛出OOM

复制:

  • 若新的容量满足需求,会调用一个Arrays.copyof方法, 将所有的元素从旧数组复制到新数组中

总结:
由于扩容涉及数组复制(时间复杂度O(n)),频繁扩容会影响性能。所说义建议使用ArrayList(int initialCapacity)构造器来指定初始容量,避免多次扩容。


为什么是1.5倍?
选择1.5 倍(即右移一位oldCapacity >> 1)是为了在时间与空间之间做平衡。

  • 如果增长倍数太小(如 1.1 倍),扩容次数频繁,复制成本高。

  • 如果增长倍数太大(如 2 倍),可能会浪费较多内存空间。
    1.5 倍既能保证均摊下来add操作的时间复杂度依然是O(1),又能避免过度的内存浪费。

http://www.jsqmd.com/news/530808/

相关文章:

  • AI人脸隐私卫士应用:家庭合影、旅行照片自动打码全攻略
  • HunyuanVideo-Foley多风格生成展示:从科幻电子音到自然白噪音
  • 收藏!小白程序员必备:详解AI Agent四种核心部署模式,助你快速上手大模型实战
  • complex.pdb含有俩化合物找氢键
  • 同样是GIS开发简历,为什么他的能让HR看完就发Offer?
  • 保姆级教程:手把手教你用YOLO11-MM搞定夜间行车目标检测(附PyTorch代码)
  • Wan2.2-I2V-A14B跨平台开发:在WSL2中体验无缝的Linux开发与调试
  • Java笔记——反射
  • 别再死记硬背了!用JavaScript手写一个三角函数计算器(附完整源码)
  • 数据库系统概论第6版第九章习题解析:从存储策略到索引优化全攻略
  • 别再死记硬背了!用Verilog实现移位寄存器的3种核心写法(附仿真对比)
  • Flowable实战:从BPMN画图到Spring Boot集成,一个请假审批系统的保姆级搭建教程
  • 如何在Python中建立高效的调试流程
  • 基于Claude Code的SDPose-Wholebody智能提示词优化方法
  • 从向量到文本:解码大模型输出背后的数学与工程实践
  • 亲测五恒系统供应商联系实践分享
  • 我电脑启动了一个WSL,如何在powershell 进入WSL
  • Qwen1.5-1.8B GPTQ模型效果深度评测:对话与代码生成能力展示
  • 如何用高效工具提升3D建模效率?STL体积计算器的技术突破与场景应用
  • 避坑指南:在Vivado/Quartus中仿真HDLbits的Module练习题时,你可能遇到的3个常见问题
  • Qwen3-ForcedAligner-0.6B企业应用:法务会议语音→带时间戳法律摘要生成
  • 终极指南:使用OpenCore Legacy Patcher让老旧Mac设备重获新生
  • PyTorch 2.8镜像效果展示:RTX 4090D跑通InternVideo2-13B多模态理解案例
  • HFSS实战解析:双频单极子天线设计中的关键参数与性能优化
  • 清音听真Qwen3-ASR-1.7B效果实测:嘈杂环境下的识别依然清晰
  • 基于PyTorch 2.8与RTX4090D的卷积神经网络(CNN)实战:从零构建图像分类模型
  • EcomGPT-中英文-7B电商模型YOLOv11技术前瞻:下一代视觉模型与文本模型的融合应用
  • 2026宁波附近发电机出租公司推荐榜:芜湖发电机租赁公司/芜湖发电机租赁电话/芜湖推荐发电机租赁公司/芜湖附近发电机出租/选择指南 - 优质品牌商家
  • 避开SpringSecurity多表登录的5个大坑:从密码加密到@Primary的完整避坑指南
  • 顺序表的增删查改