Linkedlist与ArrayList的各种操作性能对比-单线程对比
2015-04-12 16:59
435 查看
为了增加说服力,每一种操作都可以设置重复次数,重复次数越大,求平均的结果越有说服力。这里根据情况设置了1或者10(见main函数的注释)。有时间同学可以设大一些。
先贴结果:
分别对比的是:add(); addlast(); get(); remove() 方法。
结果分析:
add方法:对比性能较为明显:linkedlist的插入时间明显长一些。
addlast方法:区别不大:从尾部插入至linkedlist时间可能还要短一些(原因有待分析)。
get方法:linkedlist 性能差很多。
remove方法:linkedlist明显优于arraylist。
上一篇从源代码上做了二者简单的分析。这一篇编写单线程代码对比二者性能。
贴代码:
先贴结果:
分别对比的是:add(); addlast(); get(); remove() 方法。
insert into arraylist for 10 times cost:112 insert into linkedlist for 10 times cost:128
insert into the last of arraylist for 10 times cost:32 insert into the last of linkedlist for 10 times cost:33
find from arraylist for 1 times cost:6 find from linkedlist for 1 times cost:5261
remove 1000 numbers from arraylist for 1 times cost:70 remove 1000 numbers from linkedlist for 1 times cost:1
结果分析:
add方法:对比性能较为明显:linkedlist的插入时间明显长一些。
addlast方法:区别不大:从尾部插入至linkedlist时间可能还要短一些(原因有待分析)。
get方法:linkedlist 性能差很多。
remove方法:linkedlist明显优于arraylist。
上一篇从源代码上做了二者简单的分析。这一篇编写单线程代码对比二者性能。
贴代码:
import java.util.ArrayList; import java.util.LinkedList; /** * Created by aaashen on 2015/4/8. */ public class Vs { private ArrayList alist = new ArrayList<Integer>(); private LinkedList llist = new LinkedList<Integer>(); private long startTime,startTime2 = 0; private long endTime,endTime2 = 0; private long costTime,totalCostTime = 0; /* * @param times * 求平均的次数 * @param num * 向list中操作的次数 * */ private void testArrayInsert(int times, int num) { long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { alist = null; alist = new ArrayList<Integer>(); costTime = 0; startTime = 0; endTime = 0; startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { alist.add(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("insert into arraylist for "+times+" times cost:" + totalCostTime/times); } private void testLinkedInsert(int times, int num){ long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { llist = null; llist = new LinkedList<Integer>(); costTime = 0; startTime = 0; endTime = 0; startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { llist.add(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("insert into linkedlist for "+times+" times cost:" + totalCostTime/times); } private void testArrayInsertLast(int times, int num) { long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { alist = null; alist = new ArrayList<Integer>(); costTime = 0; startTime = 0; endTime = 0; startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { alist.add(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("insert into the last of arraylist for "+times+" times cost:" + totalCostTime/times); } private void testLinkedInsertLast(int times, int num){ long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { llist = null; llist = new LinkedList<Integer>(); costTime = 0; startTime = 0; endTime = 0; startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { llist.addLast(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("insert into the last of linkedlist for "+times+" times cost:" + totalCostTime/times); } private void testArrayFind(int times, int num) { long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { alist = null; alist = new ArrayList<Integer>(); costTime = 0; startTime = 0; endTime = 0; for (int i = 0; i < num; i++) { alist.add(i); } startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { alist.get(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("find from arraylist for "+times+" times cost:" + totalCostTime/times); } private void testLinkedFind(int times, int num){ long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { llist = null; llist = new LinkedList<Integer>(); costTime = 0; startTime = 0; endTime = 0; for (int i = 0; i < num; i++) { llist.add(i); } startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { llist.get(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("find from linkedlist for "+times+" times cost:" + totalCostTime/times); } /* * @param times * 求平均的次数 * @param num * 向list中操作的次数 * @param num_remove * 删除的次数 * */ private void testArrayRemove(int times, int num, int num_remove) { long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { alist = null; alist = new ArrayList<Integer>(); costTime = 0; startTime = 0; endTime = 0; for (int i = 0; i < num; i++) { alist.add(i); } startTime = System.currentTimeMillis(); for (int i = 0; i < num_remove; i++) { alist.remove(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("remove "+num_remove+" numbers from arraylist for "+times+" times cost:" + totalCostTime/times); } private void testLinkedRemove(int times, int num, int num_remove){ long totalCostTime = 0; long costTime = 0; long startTime = 0; long endTime = 0; for(int j=0; j<times; j++) { llist = null; llist = new LinkedList<Integer>(); costTime = 0; startTime = 0; endTime = 0; for (int i = 0; i < num; i++) { llist.add(i); } startTime = System.currentTimeMillis(); for (int i = 0; i < num_remove; i++) { llist.remove(i); } endTime = System.currentTimeMillis(); costTime = endTime - startTime; totalCostTime += costTime; } System.out.println("remove " + num_remove + " numbers from linkedlist for "+times+" times cost:" + totalCostTime/times); } public static void main(String args[]){ Vs vs = new Vs(); //由于不同操作时间长度不同,为了减少等待时间,为同一个参数设置了大小。 int times_small = 1; //重复次数-小 int times_large = 10;//重复次数-大 int num_small = 100000;//操作次数-小 int num_large = 1000000;//操作次数-大 //插入操作时间较短,因此设置的都是大的参数,比较有代表性 vs.testArrayInsert(times_large,num_large); vs.testLinkedInsert(times_large,num_large); vs.testArrayInsertLast(times_large, num_large); vs.testLinkedInsertLast(times_large, num_large); //linkedlist删除操作花太久时间,因此传入了小的参数,不影响比较 vs.testArrayFind(times_small, num_small); vs.testLinkedFind(times_small, num_small); //删除操作直接设置为1000次删除 vs.testArrayRemove(times_small, num_small, 1000); vs.testLinkedRemove(times_small, num_small, 1000); } }
相关文章推荐
- ArrayList和LinkedList的操作性能对比
- ArrayList和LinkedList的操作性能对比
- ArrayList和LinkedList的操作性能对比
- ArrayList和LinkedList的各项操作性能比较
- ArrayList和LinkedList遍历方式及性能对比分析
- 关于ArrayList与LinkedList插入元素性能的对比
- ArrayList和LinkedList的各项操作性能比较
- ArrayList和LinkedList性能对比测试
- ArrayList和LinkedList遍历方式及性能对比分析
- ArrayList和LinkedList的各项操作性能比较
- 对比ArrayList和LinkedList 使用普通循环和迭代循环的性能
- 关于LinkedList和ArrayList 插入元素的性能比较疑惑,知道的请指教......
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- 各种集合小结:arrayList和linkedList,Vector;hashmap和hashtable,hashset,
- 数组、ArrayList、LinkedList查询及遍历性能分析 .
- LinkedList, ArrayList等使用场景和性能分析)
- LinkedList、Vector和ArrayList之间的性能差异
- java性能优化-Arraylist与Linkedlist整改查性能比较
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较
- Java优化编程--核心类与性能 Vector ArrayList LinkedList String