Java Collections Framework(JCF) 是Java
SE中一个基本的类集,几乎所有的项目都会用到,其中的List 则是JCF中最最常用的一个接口。围绕List
接口,有很多实现,诸如常用的ArrayList 、LinkedList 、Vector 、Stack
,还有Java5之后引入的CopyOnWriteArrayList ,也有不少List 的开源实现,如Apache
commons-collections中的各类List
这么多的List 实现,如何选择?他们的运行效率具体怎样?本篇文章将用具体的代码来检测其中最最常用的一些List
实现
主要测试对象:
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顺序迭代
1.6for顺序迭代
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
测试代码:
package tv.lehe;
import static
java.lang.System.out; import
java.util.ArrayList; import
java.util.Collections; import
java.util.Iterator; import
java.util.LinkedList; import java.util.List; import java.util.Stack; import java.util.Vector; import
java.util.concurrent.CopyOnWriteArrayList; import
org.apache.commons.collections.FastArrayList; import
org.apache.commons.collections.list.TreeList; import
org.apache.commons.lang.StringUtils; import
org.apache.commons.lang.time.StopWatch; @SuppressWarnings("unchecked") public class ListPerformance
{ public
static void main(String[] args)
{ ListPerformance test = new ListPerformance(10 *
10000); out.print(StringUtils.center("Test List Performance: loop=" +
test.loop, 80, '-')); out.printf("\n ssssssss", "", "add", "insert", "remove", "get",
"set", "iterator","for"); test.benchmark(new
FastArrayList()); test.benchmark(new
TreeList()); test.benchmark(new
ArrayList()); test.benchmark(new
LinkedList()); test.benchmark(new
CopyOnWriteArrayList()); test.benchmark(new
Vector()); test.benchmark(new
Stack()); //2.测试排序 out.print("\n\n"); out.print(StringUtils.center("Test List sort Performance: loop=" +
test.loop, 80, '-')); out.printf("\n ssss", "", "optimize", "worst",
"random"); test.benchmarkSort(new
FastArrayList()); test.benchmarkSort(new
TreeList()); test.benchmarkSort(new
ArrayList()); test.benchmarkSort(new
LinkedList()); //test.benchmarkSort(new
CopyOnWriteArrayList());//UnsupportedOperationException test.benchmarkSort(new
Vector()); test.benchmarkSort(new
Stack());