- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)