inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.youkuaiyun.com/inkfish )。
Java Collections Framework(JCF) 是Java SE中一个基本的类集,几乎所有的项目都会用到,其中的List 则是JCF中最最常用的一个接口。围绕List 接口,有很多实现,诸如常用的ArrayList 、LinkedList 、Vector 、Stack ,还有Java5之后引入的CopyOnWriteArrayList ,也有不少List 的开源实现,如Apache commons-collections中的各类List 。
这么多的List 实现,如何选择?他们的运行效率具体怎样?本篇文章将用具体的代码来检测其中最最常用的一些List 实现。
测试环境:
处理器:Intel Core 2 Duo P8600 2.4GHz
内存:2G
硬盘:160G 7200rpm
Java:SUN JDK 1.6.0_15
开发环境:Eclipse 3.5
第三方类库:Apache commons-lang 2.4、Apache commons-collections 3.2.1
主要测试对象:
java.util.ArrayList;
java.util.LinkedList;
java.util.Stack;
java.util.Vector;
java.util.concurrent.CopyOnWriteArrayList;
org.apache.commons.collections.FastArrayList;
org.apache.commons.collections.list.TreeList;
测试用例:
1.测试List
1.1顺序添加
1.2随机插入
1.3随机删除
1.4随机访问
1.5随机更新
1.5顺序迭代
2.测试List 在三种情况下的排序效率
2.1初始时List 中元素已从小到大有序排列(最优情况)
2.2初始时List 中元素已从大到小有序排列(最差情况)
2.3初始时List 中元素随机排列,无序
3.测试List 互相转换的效率
3.1转化为TreeList
3.2转化为ArrayList
3.3转化为LinkedList
3.4转化为CopyOnWriteArrayList
3.5转化为Vector
测试代码:
测试结果:
结论:
1.随机插入、随机删除操作中,用TreeList 效率最高;
2.在只需要追加、迭代的环境下,LinkedList 效率最高;
3.平均效率来讲,ArrayList 相对平衡,但如果海量随机操作,还是会造成性能瓶颈;
4.CopyOnWriteArrayList 因为线程安全的原因,致使性能降低很多,所以慎用;
5.Vector 没有传说中那么低的效率;
6.让Stack 来做List 的事可以,不过语义上Stack 不应该做过多的List 的事情;
7.在排序中,ArrayList 具有最好的性能,TreeList 平均性能也不错,LinkedList 的排序效率受元素初始状态的影响很大。
8.各种List 间转换几乎没有时间损耗。
本文通过实际代码测试了Java中ArrayList、LinkedList、Vector、CopyOnWriteArrayList、TreeList和FastArrayList等List实现的性能,包括添加、插入、删除、获取、设置和迭代等操作。测试结果显示,FastArrayList在随机插入和删除方面表现最佳,ArrayList适合追加和迭代,而CopyOnWriteArrayList由于线程安全性能较低。此外,TreeList在排序方面表现优秀,List之间的转换几乎无时间损耗。
1万+

被折叠的 条评论
为什么被折叠?



