java列表对象的性能分析和测试

java列表对象的性能分析和测试

ID:15402128

大小:38.50 KB

页数:7页

时间:2018-08-03

java列表对象的性能分析和测试_第1页
java列表对象的性能分析和测试_第2页
java列表对象的性能分析和测试_第3页
java列表对象的性能分析和测试_第4页
java列表对象的性能分析和测试_第5页
资源描述:

《java列表对象的性能分析和测试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java列表对象的性能分析和测试由安博测试空间技术中心http://www.btestingsky.com/提供SDK提供了有序集合接口java.util.List的几种实现,其中三种最为人们熟知的是Vector、ArrayList和LinkedList。有关这些List类的性能差别是一个经常被问及的问题。在这篇文章中,我要探讨的就是LinkedList和Vector/ArrayList之间的性能差异。为全面分析这些类之间的性能差异,我们必须知道它们的实现方法。因此,接下来我首先从性能的角度出发,简要介绍这些类的实现特点。一、Vect

2、or和ArrayList的实现Vector和ArrayList都带有一个底层的Object[]数组,这个Object[]数组用来保存元素。通过索引访问元素时,只需简单地通过索引访问内部数组的元素:publicObjectget(int index){//首先检查index是否合法...此处不显示这部分代码returnelementData[index];}内部数组可以大于Vector/ArrayList对象拥有元素的数量,两者的差值作为剩余空间,以便实现快速添加新元素。有了剩余空间,添加元素变得非常简单,只需把新的元素保存到内部数组中

3、的一个空余的位置,然后为新的空余位置增加索引值:publicbooleanadd(Objecto){ensureCapacity(size+1);//稍后介绍elementData[size++]=o;returntrue;//List.add(Object)的返回值}把元素插入集合中任意指定的位置(而不是集合的末尾)略微复杂一点:插入点之上的所有数组元素都必须向前移动一个位置,然后才能进行赋值:publicvoidadd(intindex,Objectelement){//首先检查index是否合法...此处不显示这部分代码ensu

4、reCapacity(size+1);System.arraycopy(elementData,index,elementData,index+1,size-index);elementData[index]=element;size++;}剩余空间被用光时,如果需要加入更多的元素,Vector/ArrayList对象必须用一个更大的新数组替换其内部Object[]数组,把所有的数组元素复制到新的数组。根据SDK版本的不同,新的数组要比原来的大50%或者100%(下面显示的代码把数组扩大100%):publicvoidensureCa

5、pacity(intminCapacity){intoldCapacity=elementData.length;if(minCapacity>oldCapacity){ObjectoldData[]=elementData;intnewCapacity=Math.max(oldCapacity*2,minCapacity);elementData=newObject[newCapacity];System.arraycopy(oldData,0,elementData,0,size);}}Vector类和ArrayList类的主要不

6、同之处在于同步。除了两个只用于串行化的方法,没有一个ArrayList的方法具有同步执行的能力;相反,Vector的大多数方法具有同步能力,或直接或间接。因此,Vector是线程安全的,但ArrayList不是。这使得ArrayList要比Vector快速。对于一些最新的JVM,两个类在速度上的差异可以忽略不计:严格地说,对于这些JVM,这两个类在速度上的差异小于比较这些类性能的测试所显示的时间差异。通过索引访问和更新元素时,Vector和ArrayList的实现有着卓越的性能,因为不存在除范围检查之外的其他开销。除非内部数组空间耗尽

7、必须进行扩展,否则,向列表的末尾添加元素或者从列表的末尾删除元素时,都同样有着优秀的性能。插入元素和删除元素总是要进行数组复制(当数组先必须进行扩展时,需要两次复制)。被复制元素的数量和[size-index]成比例,即和插入/删除点到集合中最后索引位置之间的距离成比例。对于插入操作,把元素插入到集合最前面(索引0)时性能最差,插入到集合最后面时(最后一个现有元素之后)时性能最好。随着集合规模的增大,数组复制的开销也迅速增加,因为每次插入操作必须复制的元素数量增加了。二、LinkedList的实现LinkedList通过一个双向链接的

8、节点列表实现。要通过索引访问元素,你必须查找所有节点,直至找到目标节点:publicObjectget(intindex){//首先检查index是否合法...此处不显示这部分代码Entrye=header;//开始节点

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

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

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