ArrayList自动扩容解析

前端之家收集整理的这篇文章主要介绍了ArrayList自动扩容解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自:nofollow">http://blog.csdn.net/huangfan322/article/details/52685922

<div class="line number1 index0 alt2" style="color:rgb(51,51,51); font-family:Monaco,Menlo,Consolas,'Courier New',monospace; line-height:14.3px; font-size:13px; background-color:rgb(245,245,245); border:0px!important; bottom:auto!important; float:none!important; left:auto!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; margin:0px!important; padding:0px 1em!important">
<code class="java plain" style="font-family:Monaco,monospace; border:0px!important; bottom:auto!important; float:none!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; margin:0px!important; padding:0px!important; color:rgb(0,0)!important">探索ArrayList自动改变size真相

自动增长机制”可以自动改变size大小。正式地说,该数组是无法改变
方法生成ArrayList对象时,
生成一个长度为
  
 
方法覆盖原数组,是实现自动改变ArrayList的大小(size)的关键。有人说ArrayList是复杂的数组,我
方法组合。
方法源码如下:
  
 
  
属性指向新建长度为初始容量的临时数组
 
 
  c) {
自动改变size机制
用户增加新的列表对象,java设置了最小容量(minCapacity)
用户来讲,它是无意义的。而size存储着列表
数量,才是最终用户所需要的。为了防止用户错误修改,这一属性被设置为privae的,不过可以通过size()获取
增加和删除等三种情况下的size自动改变机制进行分析。
方法源码中,我们不难看出Capacity初始值(initialCapacity)可以由用户直接指定或由用户指定的Collection集合存
用户指定Collection创建ArrayList时,size值等于
方法
方法的源码如下:
  
添加对象时,自增size
 
方法中调用的ensureCapacityInternal主要用来调整容量,修改elementData数组的指向。其中涉及到方法的调用,其核心在于grow方法
 
 
父类AbstractList,用于存储结构修改次数
IoUs code
 
IoUs code
 
 
  MAX_ARRAY_SIZE) ?
 
代码,我们可知java自动增加ArrayList大小的思路是:向ArrayList添加对象时,原对象数目加
修改原数组,指向这个新建数组。原数组自动抛弃(java垃圾回收机制会自动回收)。size则在向数组添加对象,自增
 
   
  
方法
方法其一源码如下(其它的就不累述了):
 
 
获取指定index所在位置的对象
方法相似,都是同数组拷贝。
用户也可以指定ArrayList实例的容量,可以有效的降低时间成本。它是通过调用ensureCapacityInternal来实现的,源代码
 
方法来访问它:
用户向ArrayList追加对象时,Java总是要先计算容量(Capacity)是否适当,若容量不足则把原数组拷贝到以指定容量为长度创建的
删除对象时,先使用拷贝方法把指定index后面的对象前移

猜你在找的Java相关文章