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

每日一道面试题---ArrayList的自动扩容机制(口述版本)

首先,ArrayList是基于动态数组实现的,它的容量是可以动态增长的,ArrayList的默认容量是10,当我们向ArrayList中插入一个数据时,第一步,会先进行一个条件的校验操作,先去判断ArrayList是不是一个刚刚创建的数组,如果ArrayList是刚刚创建的数组且ArrayList中没有添加任何元素,此时不会触发扩容操作,而是直接分配一个新数组。

如果ArrayList不是一个刚刚创建的数组,当我们向ArrayList中插入数据时,先去判断要不要进行进行扩容操作,如果此时ArrayList已满,就会触发扩容操作,此时就会调用grow方法去实现扩容,在扩容时,是按照默认容量的1.5被去扩容,在真正去扩容之前会先检测新容量合不合法,防止新容量会不会太大导致扩容失败,如果新容量符合预期,ArrayList 会调用Arrays.copyof()方法创建一个新数组,并将旧数组的所有元素复制到新数组中,最后替换elemenData引用,让elemenData指向一个新数组并返回elemenData,最终完成扩容

为什么会是1.5被扩容呢?

1.5倍扩容是一个折中的方案,能够在空间利用率和扩容频率之间取得平衡,如果扩容的倍数太小,则会导致频繁扩容,影响性能,如果扩容的倍数太大,就可能导致ArrayList长期为填满,就会导致空间的浪费

 

 

 

http://www.xdnf.cn/news/775189.html

相关文章:

  • LLM模型量化从入门到精通:Shrink, Speed, Repeat
  • Java线程生命周期详解
  • 【数据分析】第三章 numpy(1)
  • 第二十一章 格式化输出
  • 制作开发AI试衣换装小程序系统介绍
  • URP - 水效果Shader
  • 类和对象(二)
  • 《Pytorch深度学习实践》ch3-反向传播
  • 使用ArcPy批量处理矢量数据
  • 力扣刷题Day 67:N 皇后(51)
  • 树莓派实验
  • 使用Bambi包进行贝叶斯混合效应模型分析
  • 强化学习-深度学习和强化学习领域
  • 通讯录Linux的实现
  • 如何选择合适的哈希算法以确保数据安全?
  • 列表推导式(Python)
  • 线程间和进程间是如何进行通信
  • PH热榜 | 2025-05-30
  • Linux中的mysql逻辑备份与恢复
  • 【AI+若依框架】基础应用篇
  • CUDA内存溢出问题解决方案
  • C++学习打卡1.01
  • SAP BC 修复MM60 报错的问题
  • MySQL 核心知识整理【一】
  • AI智能体|扣子(Coze)搭建【合同/文档审查】工作流
  • 应用程序错误 application error (0xc000007b) 处理方法
  • URL的结构与作用
  • ubuntu系统扩容
  • [SC]SystemC dont_initialize的应用场景详解(一)
  • 198. 打家劫舍