当前位置: 首页 > 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长期为填满,就会导致空间的浪费

 

 

 

相关文章:

  • Unity中应对高速运动的物体,碰撞组件失效的问题?
  • 计算机视觉---深度学习框架(Backbone、Neck、Head)
  • uniapp中view标签使用范围
  • Java实习面试题
  • 第十天:Java反射
  • vscode 插件 eslint, 检查 js 语法
  • 导入典籍数据
  • Kotlin 中 companion object 扩展函数和普通函数区别
  • 【Delphi】实现在多显示器时指定程序运行在某个显示器上
  • 使用 OpenCV (C/C++) 通过二值化增强车牌识别
  • 如何选择合适的哈希算法以确保数据安全?
  • AJAX对于XML和JSON的处理
  • 腾讯云 Python3.12.8 通过yum安装 并设置为默认版本
  • dify应用探索
  • 基于ubuntu和树莓派环境对游戏进行移植
  • imx6ull(0):烧录、启动
  • JavaSE:面向对象进阶之内部类(Inner Class)
  • Uiverse.io:免费UI组件库
  • 通信革新与网络安全探索与创新:开启未来之门
  • MySQL-多表关系、多表查询
  • 做三合一网站的好处/百度营销登录
  • 佛山做推广网站的/2020国内搜索引擎排行榜
  • 网站建设与维护属于什么岗位/seo网站排名优化公司哪家
  • wordpress 做wiki/关键词优化排名首页
  • 郑州交易网站建设/外链工具下载
  • 呢图网站党风廉政建设/百度优化师