javaarraylist工作原理及实现-java开发java经验技巧

javaarraylist工作原理及实现-java开发java经验技巧

ID:30777487

大小:146.53 KB

页数:5页

时间:2019-01-03

javaarraylist工作原理及实现-java开发java经验技巧_第1页
javaarraylist工作原理及实现-java开发java经验技巧_第2页
javaarraylist工作原理及实现-java开发java经验技巧_第3页
javaarraylist工作原理及实现-java开发java经验技巧_第4页
javaarraylist工作原理及实现-java开发java经验技巧_第5页
资源描述:

《javaarraylist工作原理及实现-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JavaArrayListT作原理及实现-编程开发技术JavaArrayList工作原理及实现原文出处:Yikun1.概述关于Java集合的小抄中是这样描述的:以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,HjSystem,arraycopy()复制到新的数组,因此最好能给出数组人小的预估值。默认第一次插入元索时创建人小为10的数组。按数组下标访问元素一get(i)/set(i,e)的性能很高,这是数组的基本优势。直接在数组末尾加入元素一add(e)的性能也高,但如果按下标插入、

2、删除元素一add(i,e),remove(i),remove(e),则要用System,arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。然后再来学习一下官方文档:Resizab1e~array?imp1ementationoftheListinterface.Tmplementsal1optionallistoperations,andpermitsal1clemcnts,includingnull・InadditiontoimplcmcntingtheListinterfa

3、ce,thisclassprovidesmethodstomanipulatethesizeofthearraythatisusedinternallytostorethelist.(ThisclassisroughlyequivalenttoVector,exceptthatitisunsynchronized.)ArrayList是一个相对来说比较简单的数据结构,最重要的一点就是它的自动扩容,可以认为就是我们常说的“动态数组”。來看一段简单的代码:ArrayListlist二new

4、ArrayList();list.add(,z语文:99");list,add("数学:98");list,add(,z英语:100");list,remove(0);在执行这四条语句时,是这么变化的:语文:99语文:99语文:99数学:98数学:98HhhJLJLJLJLJL」数学:98HhhJLJLJLJ_JLJL」英语:100hhJLJLJL英语:100卜LT卜卜卜卜h卜卜Llist▲e[数学:98,其屮,add操作可以理解为直接将数组的内容置位,remove操作可以理解为删除i

5、ndex为0的节点,并将后面元索移到0处。2.add函数当我们在ArrayList中增加元素的时候,会使用add函数。他会将元素放到末尾。具体实现如下:publicbooleanadd(Ee){cmsurcCapacitylntcrnal(size+1);//IncrementsmodCount!!elementData[size++]=e;returntrue;我们可以看到他的实现其实最核心的内容就是ensureCapacityInternal。这个函数其实就是自动扩容机制的核心。我们依次來看一下他

6、的具体实现privatevoidcnsurcCapacitylnternal(intminCapacity){if(elementData==DEFAULTCAPAC1TY_EMPTY_ELEMENTDATA){minCapacity=Math,max(DEFAULTCAPACITY,minCapacity);}"cnsurcExplicitCapacity(minCapacity);}privatevoidensureExplicitCapacity(intminCapacity){modCount

7、++;//overflow-consciouscodeif(minCapacity-elementData.length>0)grow(minCapacity);}privatevoidgrow(intminCapacity){//overflow-consciouscodeintoldCapacity二elementData.length;//扩展为原來的1.5倍intncwCapacity二oldCapacity+(oldCapacity>>1);//如果扩为1・5倍还不满足需求,直接扩为需求值i

8、f(newCapacity-minCapacity<0)newCapacity二minCapacity;if(newCapacity-MAX_ARRAY_STZE>0)ncwCapacity二hugcCapacity(minCapacity);//minCapacityisusuallyclosetosize,sothisisawin:elementData二Arrays.copyOf(elementData,newCapacity);}也就是说,当增加

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。