最近对ArrayList和LinkedList对删除的快慢比较疑惑,都知道ArrayList是基于数组的,而LinkedList基于链表;
所以很容易认为ArrayList删除比LinkedList快,但是LinkedList删除操作时包括查询、删除两个操作的,因为链表要先查询到这个位
置才能删除;就此我特意写了个案列测试了一下:
public void test(){
int capacity = 10;
ArrayList arrayList = new ArrayList();
LinkedList linkList = new LinkedList();
for(int i = 0; i < capacity; i++){
arrayList.add(i);
linkList.add(i);
}
System.out.println(arrayList.size()+":"+linkList.size());
long t1 = System.nanoTime();
for(int i = 0; i < capacity; i++){
arrayList.remove(0);
}
long t2 = System.nanoTime();
System.out.println("spendTime"+ (t2 - t1));
long t3 = System.nanoTime();
for(int i = 0; i < capacity; i++){
linkList.remove(0);
}
long t4 = System.nanoTime();
System.out.println("spendTime"+(t4 - t3));
}
结果
spendTime17533
spendTime22665
测试了很多次,绝大多数都是ArrayList要快
当capacity设为10000时,
结果
spendTime46501026
spendTime8272446
测试了很多次,LinkLIst要快
结论: 数据很少时,ArrayList用时比较少;数据比较大时,LinkList用时比较少