面试题:ArrayList扩容时扩容多少?

大家好,我是你们的小米!今天要和大家一起来探讨一个在Java面试中经常被问到的问题:“ArrayList扩容时扩容多少?”相信很多小伙伴都在面试中遇到过这个问题,那么接下来,我就为大家详细解析一下这个问题,希望能够帮助大家在面试中游刃有余!

了解ArrrayList的内部实现

在深入解析扩容策略之前,我们首先要了解一下ArrayList的内部实现原理。ArrayList是Java集合框架中的一个动态数组,它可以根据需要动态地增加或减少元素。ArrayList的底层是通过数组实现的,当数组容量不足以存放新增的元素时,就需要进行扩容操作。

扩容策略简介

ArrayList在扩容时,并不是每次新增一个元素就扩容一次,这样效率会很低。相反,它采取了一种“倍增”策略,即当数组容量不够用时,它会将当前容量翻倍。这样做的好处是,在一次扩容操作中,可以一次性扩充一大块内存,减少了频繁扩容带来的性能损耗。

源码分析

ArrayList的扩容逻辑实际上是由ensureCapacityInternal方法来完成的。我们一起来看一下这段源码:

 

 

从上面的代码中,我们可以看到,在grow方法中,新的容量(newCapacity)是通过将旧容量(oldCapacity)右移一位(即除以2),然后再加上旧容量得到的。这样就实现了容量的翻倍扩容策略。

理解扩容的触发条件

在源码分析的基础上,我们来总结一下ArrayList扩容的触发条件:

  • 当前元素个数(size)已经达到了当前数组容量(length)。
  • 添加一个元素时,需要保证容量足够,否则触发扩容。

需要注意的是,虽然数组会根据倍增策略进行扩容,但也并不是无限制地扩容下去的。在源码中,有一个MAX_ARRAY_SIZE的限制,如果计算得到的新容量超过了这个值,就会进行特殊处理。

END

通过对ArrayList扩容策略的源码分析和解释,我们可以得出结论:ArrayList在扩容时采用了倍增策略,每次扩容都会将当前容量翻倍,从而有效地减少了频繁扩容带来的性能损耗。同时,也要注意到MAX_ARRAY_SIZE的限制,防止无限制地扩容。掌握了这些知识,相信在面试中回答关于ArrayList扩容策略的问题时,大家已经游刃有余了!

如果你觉得这篇文章对你有帮助,记得点赞和分享哦!如果还有其他技术问题想要了解,欢迎留言告诉我,我们可以一起探讨学习~

本文内容仅供学习交流,如有错误或不足之处,欢迎指正!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/86534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV实例(八)车牌字符识别技术(三)汉字识别

车牌字符识别技术(三)汉字识别 1.代码实例2.遇到问题3.汉字识别代码实例 相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面: (1)字符笔画因切分误差导致非笔画或笔画流失。 (2…

【C++】开源:CGAL计算几何库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍CGAL计算几何库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,…

MachineLearningWu_16/P72-P77_Diagnostic

x.1 导数,计算图,大型网络 计算图就是根据链式法则求取偏导,大型网络就是多层网络堆叠而成。 x.2 Diagnostic 在我们对深度学习有了一些认知后,最重要的就是模型的诊断,以带有L1正则化的线性回归为例,我…

Vue中使用Tailwind css

1.什么是Tailwind 就是一个CSS框架,和你知道的bootstrap,element ui,Antd,bulma。一样。将一些css样式封装好,用来加速我们开发的一个工具。 Tailwind解释 tailwind css 中文文档 2.Vue使用Tailwind配置 1. 新建vu…

探索FSM (有限状态机)应用

有限状态机(FSM) 是计算机科学中的一种数学模型,可用于表示和控制系统的行为。它由一组状态以及定义在这些状态上的转换函数组成。FSM 被广泛用于计算机程序中的状态机制。 有限状态机(FSM)应用场景 在各种自动化系统…

【iOS】RunLoop

前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…

SpringBoot案例-部门管理-新增

根据页面原型,明确需求 页面原型 需求 阅读接口文档 接口文档链接如下: 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 前端在输入要新增的部门名称后,会以JSON格式将数据传入至后端&#xf…

php使用get和post传递数据出现414 Request-URI Too Large的解决方案

递数据出现414 Request-URI Too Large的解决方案 一、Request-URI Too Large的原因二、GET与POST三、项目分析1.读取源数据2.将读取的到数据,进行传递3.ajax获取传递的数据并传递到后台4.传递数据5.解决方案 一、Request-URI Too Large的原因 “Request-URI Too La…

HTTP和HTTPS

目录 HTTP和HTTPS的基本概念(应用层协议) HTTP的版本 HTTP状态码 HTTP请求报文 GET和POST请求 GET和POST请求的区别 条件GET方法 HTTP与HTTPS有什么区别? HTTP的工作原理 HTTP的长链接 http1.1长链接判断一个请求已经结束了 HTTP管线化 HTT…

分布式学习最佳实践:从分布式系统的特征开始

正文   在延伸feature(分布式系统需要考虑的特性)的时候,我逐渐明白,这是因为要满足这些feature,才设计了很多协议与算法,也提出了一些理论。比如说,这是因为要解决去中心化副本的一致性问题&…

iOS 使用build setting中的配置项配置info.plist

如图所示,选中build setting,由于我们这里是想要获取版本号, 所以这里获取current project version 选中info,将bundle version 设置为$(CURRENT_PROJECT_VERSION),注意,要使用下划线链接&…

案例10 Maven入门案例

基于Maven构建快速构建项目,输出“Hello World!”。 1.选择Maven快速构建项目 ​2.设置Maven项目信息 ​3.设置Maven环境信息 ​4.项目结构 ​ 5.Maven操作 ​6.执行结果

GDB 函数调用栈管理

栈的调用关系:后进先出 1、bt:backtrace 查看栈回溯信息 #0号栈桢表示正在执行的函数,在栈的最顶部。 2、frame n 切换栈桢 3、info f n 查看栈桢信息 4、直接调用函数 格式 p 函数名(参数) 或者 call 函数名(参数)(gdb) p get_time_stam…

使用webpack插件webpack-dev-server 出现Cannot GET/的解决办法

问题描述 文档地址深入浅出webpack 使用 DevServer运行webpack,跑起来之后提示Cannot GET/: 解决方案: 查阅官方文档 根据目录结构修改对应的配置: 然后就可以成功访问:

【mysql】MySQL CUP过高如何排查?

文章目录 一. 问题锁定二. QPS激增会导致CPU飘高三. 慢SQL会导致CPU飘高四. 大量空闲连接会导致CPU飘高五. MySQL问题排查常用命令 一. 问题锁定 通过top命令查看服务器CPU资源使用情况,明确CPU占用率较高的是否是mysqld进程,如果是则可以明确CUP飘高的原…

爬虫018_urllib库_cookie反爬_post请求百度翻译获取百分翻译内容_以及详细翻译内容---python工作笔记037

然后我们来看如何用urllib发送post请求,这里我们 用百度翻译为例 我们翻译一个spider,然后我们看请求,可以看到有很多 找到sug这个 可以看到这里的form data,就是post请求体中的内容 然后我们点击preview其实就是 返回的实际内容 然后请求方式用的post 然后我们把上面的信息…

DIP: NAS(Neural Architecture Search)论文阅读与总结(双份快乐)

文章地址: NAS-DIP: Learning Deep Image Prior with Neural Architecture SearchNeural Architecture Search for Deep Image Prior 参考博客:https://zhuanlan.zhihu.com/p/599390720 文章目录 NAS-DIP: Learning Deep Image Prior with Neural Architecture Search1. 方法…

设计模式-单例模式

1、概念 创建型模式 确保一个类在任何情况下都绝对只有一个实例,并且提供一个全局访问点。 2、模式 1)饿汉式单例模式 在类加载的时候就立即初始化,并且创建单例对象。 绝对线程安全,在线程还没出现以前就实例化了&#xff0…

[保研/考研机试] KY3 约数的个数 清华大学复试上机题 C++实现

题目链接&#xff1a; KY3 约数的个数 https://www.nowcoder.com/share/jump/437195121691716950188 描述 输入n个整数,依次输出每个数的约数的个数 输入描述&#xff1a; 输入的第一行为N&#xff0c;即数组的个数(N<1000) 接下来的1行包括N个整数&#xff0c;其中每个…

Arcgis将一个shp依照属性表导出为多个shp

# -*- coding:utf-8 -*-import arcpy import osfrom arcpy import env#env.workspace "./" #自己设置路径shp rC:\Users\Administrator\Desktop\Lake\xxx.shp #shp文件路径outpath r"C:\Users\Administrator\Desktop\Lake\fenli" #输出结果路径with arc…