ArrayList:
通过查看JDK1.8的源码发现ArrayList继承于AbstractList、List、RandomAccess、Cloneable、Serializable;
通过查看JDK1.8的源码发现ArrayList继承于AbstractSequentialList、List、Deque、Cloneable、Serializable;
以下为测试代码:
package com.tfq.chapter8;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class ListPerformance {
private static final int REPS=3000;
private abstract static class Tester {
String name;
int size;
Tester(String name,int size){
this.name=name;
this.size=size;
}
abstract void test(List a);
}
private static Tester[] tests= {
new Tester("get",3000) {
void test(List a) {
for(int i=0;i<REPS;i++) {
for(int j=0;j<a.size();j++)
a.get(j);
}
}
},
new Tester("iteration",3000) {
void test(List a) {
for(int i=0;i<REPS;i++) {
Iterator it=a.iterator();
while(it.hasNext())
it.next();
}
}
},
new Tester("insert",3000) {
void test(List a) {
int half=a.size()/2;
String s="test";
ListIterator it=a.listIterator(half);
for(int i=0;i<size*10;i++) {
it.add(s);
}
}
},
new Tester("remove",3000) {
void test(List a) {
ListIterator it=a.listIterator(3);
while(it.hasNext()) {
it.next();
it.remove();
}
}
},
};
public static void test(List a) {
//A trick to print out the class name;
System.out.println("Testing="+a.getClass().getName()+",size()="+tests.length);
for(int i=0;i<tests.length;i++) {
Collection1.fill(a,tests[i].size);
System.out.println(tests[i].name);
long t1=System.currentTimeMillis();
tests[i].test(a);
long t2=System.currentTimeMillis();
System.out.println(":"+(t2-t1));
}
}
public static void main(String[] args) {
test(new ArrayList());
test(new LinkedList());
}
}
运行测试代码结果如下:
| Type | get | iteration | insert | remove |
| ArrayList | 7 | 11 | 26 | 184 |
| LinkedList | 10483 | 96 | 1 | 2 |
由于测试用机器的不同,结果当然也会有所区别。这个程序的宗旨是提示出不同集合类型的相对性能比较。
可以看出,在ArrayList中随机访问(即get())以及循环反复是最划得来的;但对于LinkedList却是一个不小的开销。但另一方面,在列表中部进行插入和删除操作对于LinkedList来说却比ArrayList划算多。我们最好的做法也许是先选择一个ArrayList作为自己的默认起点。以后若发现由于大量的插入和删除造成了性能的降低,再考虑换成LinkedList不迟。
本文通过测试代码对比了ArrayList和LinkedList在get、iteration、insert、remove四种操作下的性能。结果显示,ArrayList在随机访问和迭代方面表现出色,而LinkedList在列表中间的插入和删除操作上更胜一筹。
2318

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



