关于ArrayList和LinkedList的查询、添加(尾部添加、中间添加)所耗费的时间进行测试,验证LinkedList和ArrayList添加操作到底谁更快!实践才是检验真理的唯一标准!
1.首先是查询的测试(测试数据10w条):毫无疑问ArrayLink遥遥领先
List<Integer> arrList = new ArrayList<>();
List<Integer> linkList = new LinkedList<>();
private void getArray(){
for (int i = 0; i < 100000; i++) {
arrList.add(i);
}
long start = System.currentTimeMillis();
for (int i = 0; i < arrList.size(); i++) {
arrList.get(i);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList所花费的时间:"+(end - start));
}
private void getLinked(){
for (int i = 0; i < 100000; i++) {
linkList.add(i);
}
long start = System.currentTimeMillis();
for (int i = 0; i < linkList.size(); i++) {
linkList.get(i);
}
long end = System.currentTimeMillis();
System.out.println("LinkedList所花费的时间:"+(end - start));
}
所耗费的时间:
2. 尾部插入测试(测试数据1000w条):多次运行发现-->ArrayList比LinkedList会好上一点
private void addArray(){
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
arrList.add(i);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList所花费的时间:"+(end - start));
}
private void addLinked(){
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
linkList.add(i);
}
long end = System.currentTimeMillis();
System.out.println("LinkedList所花费的时间:"+(end - start));
}
运行结果:
3.中间位置插入(先插入50w条数据,再在0、1、2、3...i-1位置插入50w条数据)结果如何呢?
private void addIndexArray(){
for (int i = 0; i < 500000; i++) {
arrList.add(i);
}
long start = System.currentTimeMillis();
for (int i = 1; i < 500001; i++) {
arrList.add(i-1,i);
}
long end = System.currentTimeMillis();
System.out.println("ArrayList所花费的时间:"+(end - start));
}
private void addIndexLinked(){
for (int i = 0; i < 500000; i++) {
linkList.add(i);
}
long start = System.currentTimeMillis();
for (int i = 1; i < 500001; i++) {
linkList.add(i-1,i);
}
long end = System.currentTimeMillis();
System.out.println("LinkedList所花费的时间:"+(end - start));
}
结果:
结果竟然还是ArrayList的速度快,而且还是快很多,这可能只是个例,但是却推翻了一直以来大众的固有印象:频繁添加用LinkedList。所以以后要用到时还需具体的测试。
以至于为什么ArrayList的综合性能更好,这就不得不说下操作系统的局部性原理了,感兴趣的同学可以去翻阅《深入理解计算机系统》。