科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Java列表对象的性能分析和测试(4)

Java列表对象的性能分析和测试(4)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SDK提供了有序集合接口java.util.List的几种实现,其中三种最为人们熟知的是Vector、ArrayList和LinkedList。有关这些List类的性能差别是一个经常被问及的问题。在这篇文章中,作者要探讨的就是LinkedList和Vector/ArrayList之间的性能差异。

作者:东波\\\\\\\'S BLOG 来源:东波’S BLOG 2007年9月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
四、查询的性能



在类的内部实现查询时查询的性能最高。对于查询这些列表来说,迭代所有元素所需要的时间是一个限制因素。ArrayList/Vector类中实现的查询将对类的元素进行迭代。下面的例子计算空元素的总数量:

int count = 0;

for (int i = 0; i < size; i++)

if(elementData[i] == null)

count++;

LinkedList类中实现的查询将搜索所有的节点。下面的例子计算所有空元素的总数量:

node = header.next;

count = 0;

for (int i = 0; i < repeat; i++, node = node.next)

if (node.element == null)

count++;

表4显示出,ArrayList的性能显著地超过了LinkedList,它再一次显示出ArrayList应该是我们首选的类。表5显示了利用从List.listIterator(int)获得的ListIterator对象迭代所有元素所需要的时间,如果查询机制不能在List内部实现,这些迭代器是必需的。ArrayList再一次显示出了较高的性能,但这次性能的差异程度不象表4显示的那样不可思议。注意,表5所显示的绝对时间相当于表4显示绝对时间的10倍,即,ArrayList内部遍历大约比ArrayList利用ListIterator迭代要快10倍。

表4:通过内部访问迭代集合中的所有元素

 

1.2 JVM

1.3 JVM

HotSpot 2.0 JVM

ArrayList内部搜索

100%

106%

197%

LinkedList内部搜索

470%

493%

448%

表5:通过ListIterator遍历集合中的所有元素

 

1.2 JVM

1.3 JVM

HotSpot 2.0 JVM

利用ListIterator迭代ArrayList

100%

118%

75.2%

利用ListIterator迭代ListedList

117%

186%

156%

结束语

实际测量和我们所考虑的其他因素都清楚地显示出,ArrayList和Vector通常比LinkedList和同步封装之后的LinkedList有着更好的性能。即使在你认为LinkedList可能提供更高性能的情况下,你也可以通过修改元素加入的方式从ArrayList争取更好的性能,例如翻转集合元素的次序。

有些情况下LinkedList会有更好的性能,例如,当大量元素需要同时加入到大型集合的开头和末尾时。但一般而言,我建议你优先使用ArrayList/Vector类,只有当它们存在明显的性能问题而LinkedList能够改进性能时,才使用LinkedList。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章