ArrayList与linkedList的用法区别及扩容方式.docx

ArrayList与linkedList的用法区别及扩容方式.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

ArrayList与linkedList的用法区别及扩容方式

小结

同样查找,时间复杂度都是O(N),但是数组要比链表快因为数组的连续内存,会有一部分或者全部数据一起进入到CPU缓存,而链表还需要在去内存中根据上下游标查找,CPU缓存比内存块太多数据大小固定,不适合动态存储,动态添加,内存为一连续的地址,可随机访问,查询速度快链表代销可变,扩展性强,只能顺着指针的方向查询,速度较慢

7.ArrayList的源码分析

7.1ArrayList的主要成员变量

privatestaticfinalintDEFAULT_CAPACITY=10;

//ArrayList的默认长度是多少

privatestaticfinalObject[]EMPTY_ELEMENTDATA={};

//ArrayList的默认空元素链表

privatestaticfinalObject[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA={};

//ArrayList存放的数据

transientObject[]elementData;//non-privatetosimplifynestedclassaccess

//ArrayList的长度

privateintsize;

7.2ArrayList的构造函数

//构造一个初始化容量为10的空列表

publicArrayList(){

this.elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

//初始化一个指定大小容量的列表

publicArrayList(intinitialCapacity){

if(initialCapacity0){

this.elementData=newObject[initialCapacity];

}elseif(initialCapacity==0){

this.elementData=EMPTY_ELEMENTDATA;

}else{

thrownewIllegalArgumentException(IllegalCapacity:+

initialCapacity);

//构造一个包含指定集合的元素列表,按照它们由集合迭代器返回的顺序

publicArrayList(CollectionextendsEc){

elementData=c.toArray();

if((size=elementData.length)!=0){

//c.toArraymight(incorrectly)notreturnObject[](see6260652)

if(elementData.getClass()!=Object[].class)

elementData=Arrays.copyOf(elementData,size,Object[].class);

}else{

//replacewithemptyarray.

this.elementData=EMPTY_ELEMENTDATA;

}

7.3扩容机制

ArrayList扩容的核心从ensureCapacityInternal方法说起。可以看到前面介绍成员变量的提到的ArrayList有两个默认的空数组:

DEFAULTCAPACITY_EMPTY_ELEMENTDATA:是用来使用默认构造方法时候返回的空数组。如果第一次添加数据的话那么数组扩容长度为DEFAULT_CAPACITY=10。EMPTY_ELEMENTDATA:出现在需要用到空数组的地方,其中一处就是使用自定义初始容量构造方法时候如果你指定初始容量为0的时候就会返回。

//增加元素的方法

publicbooleanadd(Ee){

ensureCapacityInternal(size+1);//IncrementsmodCount!!

elementData[size++]=e;

returntrue;

//判断当前数组是否是默认构造方法生成的空数组,如果是的话minCapacity=10反之则根据原来的值传入下一个方法去完成下一步的扩容判断

privatestaticintcalculateCap

文档评论(0)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档