从访谈的角度分析ArrayList源代码

注意:本系列文章中使用的jdk版本都是java8。 ArrayList类图如下:ArrayList的底层由一个数组实现,该数组的特征是固定大小,而ArrayList实现动态扩展。
ArrayList的一些变量如下,将在以下分析中使用。 / ** *默认容量* / private静态最终int DEFAULT_CAPACITY = 10; / ** *空对象数组* / private静态最终Object [] EMPTY_ELEMENTDATA = {}; / ** *无参数构造函数创建的空数组* / private静态最终Object [] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; / ** *缓存存储数据的数组的变量* / transient Object [] elementData; / ***元素数* / private int大小;初始化ArrayList并初始化ArrayList通常使用以下两个构造函数1.1使用无参数构造函数初始化ArrayList时,如果不指定大小,则将创建一个空数组。
public ArrayList(){this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;} 1.2指定数组大小的构造函数将创建一个估计大小的数组。指定大小后,仅指定数组初始值的大小,这不会影响后续的扩展。
指定的优点是它可以节省内存和时间开销。公共ArrayList(int initialCapacity){if(initialCapacity> 0){this.elementData =新对象[initialCapacity];} else if(initialCapacity == 0){this.elementData = EMPTY_ELEMENTDATA;} else {引发新的IllegalArgumentException(“ Illegal容量:“ + initialCapacity);两个添加元素,动态扩展ArrayList.add(E e)源代码:public boolean add(E e){sureCapacityInternal(size + 1); //递增modCount !! elementData [size ++] = e;返回true;} add()中的elementData [size ++] = e很容易理解,即将元素插入size位置,然后插入size ++。
让我们专注于sureCapacityInternal(size + 1)方法;私用void sureCapacityInternal(int minCapacity){If(elementData = = DEFAULTCAPACITY_EMPTY_ELEMENTDATA){minCapacity = Math.max(DEFAULT_CAPACITY,minCapacity);如果(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)是首次确定sureExplicitCapacity(ensureExplicitCapacity)变量(ensureExplicitCapacity)(ensureDataCapacity)中的缓存是否与判断内部变量(ensureDataCapacity)是否添加元素相同。如果是第一次添加元素,请将初始大小设置为默认容量10,否则为传入参数。
此方法的目的是获得初始阵列容量。获得初始容量后,请调用suresureExplicitCapacity(minCapacity)方法;私有void sureExplicitCapacity(int minCapacity){modCount ++; //具有溢出意识的代码If(minCapacity)-elementData.length> ExplicitCapacity(0)容量方法;要确定是否需要扩展,如果是第一次添加元素,minCapacity为10,elementData容量为0,则需要扩展。
调用grow(minCapacity)方法。 //数组的最大容量private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE-8; private void grow(int minCapacity){意识溢出的代码= int oldCapacity = elementData.length的原始长度的1.5倍;数组原始长度的1.5倍int newCapacity = oldCapacity +(oldCapacity>> 1); //如果扩展容量小于需要扩展的长度,则如果(newCapacity-minCapacity 0)-minCapacity /数组的最大容量大于容量minCapacity,则使用需要扩展的容量使用最大整数如果(newCapacity- MAX_ARRAY_SIZE> 0)NewCapacity = hugeCapacity(minCapacity); // minCapacity通常接近大小,则长度是一个双数:soCapacity ofCapacity(newCapacity)grow(Capacity))扩展数组的方法,扩展大小为1.5倍于原始数组,如果计算出的扩展容量小于所需容量,则扩展大小为所需容量,如果扩展容量大于阵列的最大容量,则调用hugeCapacity(minCapacity)方法,展开将数组设置为最大整数长度,然后将elemetData数组指向新扩展的内存空间,然后将元素复制到新空间。
当所需的收集容量特别大时,扩展1.5倍会占用大量空间,因此建议在初始化期间估计容量大小。三个删除元素ArrayList提供了两种删除元素的方法,可以按索引和元素删除。
这两个删除是相似的。删除元素后,以下元素将一次向前移动。
ArrayList.remove(int index)源代码:public E remove(int index){rangeCheck(index); modCount ++; E oldValue = elementData(index); Int numMoved = size-index-1;

公司: 深圳市捷比信实业有限公司

电话: 0755-29796190

邮箱: ys@jepsun.com

产品经理: 汤经理

QQ: 2057469664

地址: 深圳市宝安区翻身路富源大厦1栋7楼

微信二维码

更多资讯

获取最新公司新闻和行业资料。

  • 电阻r的大小对谐振频率有无影响 R对频率没有影响,但影响曲线的陡度,即质量因子Q。R越大,Q越低,峰值越慢。...
  • double sum = 0.0; for(int i = 0; i < n; i++) { if(resistors[i] > 0) { sum += 1.0 / resistors[i]; 在C语言中计算并联电阻的总电阻是一个常见的应用问题,它涉及到基本的物理知识与编程技巧的结合。并联电路中的总电阻可以通过所有并联电阻倒数的和的倒数来计算。首先,我们需要定义一个函数来处理这一计算过程。例如...
  • RALEC旺诠LR-A车用合金电阻 RALEC旺诠LR-A系列金属微合金电阻是属于汽车级金属微电阻,符合汽车级认证AEC-Q200。产品无铅无卤,符合ROHS环保标准。LR-A系列是金属板微电阻器。RALEC旺诠LR-A系列金属微合金电阻的主要特点有:1.符合汽车级认证,AEC-Q200。2.符合...
  • TSS管与聚鼎PXXXX S系列比较分析 在电力电子领域中,TSS管(Transient Voltage Suppression Tube)是一种重要的保护器件,用于防止电压瞬变对电路造成损害。聚鼎科技作为一家专注于半导体防护器件的企业,其PXXXX S系列也是市场上的热门产品之一。本文将从技术参数...
  • ABB塑壳断路器(S系列.T系列): 高效可靠的配电解决方案 ABB塑壳断路器以其卓越的性能和可靠性在电气行业中享有盛誉。S系列和T系列作为ABB断路器中的佼佼者,分别针对不同的应用领域提供了高效且灵活的解决方案。S系列塑壳断路器设计紧凑、功能全面,适用于各种工业及商业环境...
  • HELI2直角LED灯珠 2.1X0.6mm 右角 小尺寸高亮度 对于HELTI2直角LED灯珠 2.1X0.6mm这一款产品,它具有非常小的尺寸,却拥有着强大的发光能力。这款LED灯珠采用右角设计,能够更好地适应各种空间狭小且布局复杂的环境,例如电子设备内部、小型仪器仪表等。其尺寸为2.1X0.6mm,非...
  • 五向开关DC12(V)0.05(A):应用与技术参数 五向开关DC12(V)0.05(A)是一种电子元件,它在电路设计和设备控制中发挥着重要作用。这种开关通常用于需要控制多个方向或功能的应用场景,例如遥控器、游戏控制器或是小型电子设备的导航按钮等。五向开关能够提供上、...
  • 厚膜电阻器CR.A系列参数与应用详解 在电子工程领域,厚膜电阻器因其稳定性高、温度系数小等优点而被广泛使用。CR.A系列作为其中的一种,凭借其优异的性能,在众多应用场景中展现出色的表现。下面将详细介绍CR.A系列厚膜电阻器的主要参数及其应用。### 1. 主...
  • 汽车级宽端子贴片电阻CRW..A系列详解 在当今汽车电子技术迅速发展的背景下,汽车级宽端子贴片电阻(CRW..A系列)成为了众多工程师和设计师关注的焦点。这类电阻以其卓越的性能、可靠性和适应性,在汽车电子系统中扮演着不可或缺的角色。下面将详细介绍CRW.....
  • 高压电阻器HVR.A系列参数与应用详解 高压电阻器在许多工业和科研领域中扮演着重要角色,特别是在需要高稳定性和高精度的应用场合。HVR.A系列高压电阻器以其卓越的性能和广泛的应用范围而受到众多工程师和技术人员的青睐。下面将详细介绍HVR.A系列高压电阻器...
  • 耐脉冲电阻PWR A系列特性与应用详解 在电力电子系统中,脉冲电阻是一种关键的元件,用于吸收和耗散脉冲能量,保护电路免受过电压损害。其中,PWR..A系列耐脉冲电阻以其卓越的性能和可靠性,在众多应用场景中脱颖而出。下面将详细介绍PWR..A系列耐脉冲电阻的...
  • 浪涌电阻器SWR.A系列应用与特性详解 浪涌电阻器(SWR.A系列)是电力系统中不可或缺的一部分,主要用于抑制和吸收电网中的瞬时电压冲击,保护电力设备免受损害。这一系列的电阻器在设计上具有诸多优势,适用于多种应用场景,从工业生产到可再生能源发电站,...
  • viking新品播报:长端接厚膜电阻器- CRW ..A 系列 关注稳健设计,为 PCB 散热提供更短的路径,提高额定功率,宽电极结构支持良好的热循环性能。调整焊膏的成分以提供所需的近似电阻,并通过激光微调器将其微调至指定值。特征- 长边端接增强了紧凑尺寸的额定功率- AEC-Q200 ...
  • 薄膜精密电阻器AR.A系列参数及应用领域 薄膜精密电阻器AR.A系列是电子工程中非常重要的元件之一,广泛应用于各种高精度测量和控制设备中。这些电阻器以其卓越的性能和稳定性著称,能够满足各种复杂环境下的使用需求。AR.A系列薄膜精密电阻器具有极低的温度系...
  • 霍尼韦尔SZL-WLC-A行程开关:可靠与灵活性的完美结合 霍尼韦尔SZL-WLC-A行程开关是一款高性能的设备,专为满足各种工业应用的需求而设计。该行程开关具备出色的可靠性和耐用性,能够在严苛的工作环境中保持稳定的性能。其设计灵活,安装简便,可以适应不同的安装空间和角度...
  • 霍尼韦尔SZL-WL-A与GCP-31A:高性能行程开关的应用与特点 霍尼韦尔作为全球领先的自动化控制系统制造商之一,其产品广泛应用于工业、商业及住宅等多个领域。其中,行程开关是用于检测机械运动位置的一种重要元件,能够实现自动化控制系统的精准操作。型号为SZL-WL-A的行程开关和...
  • 原装行货霍尼韦尔SZL-WLC-A行程开关:高性能与可靠性的结合 原装行货霍尼韦尔SZL-WLC-A行程开关是一种高品质的控制设备,广泛应用于各种工业自动化领域。该行程开关具有高精度、耐用性强的特点,能够满足在恶劣环境下的工作需求。其设计紧凑,安装简便,适用于多种机械装置的位置...
  • A*压力开关BP-F8-1A与BP-F8-5C: 工业自动化中的关键组件 A*压力开关BP-F8-1A和BP-F8-5C是两款高性能的压力检测设备,主要用于工业自动化领域。这两款产品在设计上都采用了先进的传感技术和精密的制造工艺,能够在各种恶劣环境下稳定工作,确保系统的安全运行。BP-F8-1A与BP-F8-5C的主要...
  • 万用表测电阻显示0.L的原因解析 当使用万用表测量电阻时,如果显示屏上出现“0.L”的读数,这通常意味着被测电阻值小于万用表能够准确显示的最小值。具体来说,“0.L”中的“L”代表低(Low)的意思,表示电阻值过低以至于超出了当前量程设置下的分辨率...
  • 角度传感器工作原理及应用领域 角度传感器是一种用于测量旋转或倾斜角度的设备,在多个领域中发挥着重要作用。它们的工作原理基于不同的技术,包括但不限于电位计式、磁性、电容式和光学方法。电位计式角度传感器通过检测电阻的变化来确定角度;磁...