标签:
ArrayList与LinkedList在底层的实现是不一样的,前者依托于数组,后者依托于链表,与其说是ArrayList与LinkedList的区别不如说是数组与链表的区别。
1.对于数组(ArrayList)而言,随机访问的get比较占优势。
例子:
对于均存放了200000个元素的ArrayList和LinkedList,使用get获取其中元素。
int temp=0; System.out.print("ArrayList获取元素的时间\n"); for(int j=0;j<arrlist.size();j++){ if(j%40000==0){ temp++; long begin2 = System.nanoTime(); System.out.println(arrlist.get(j)); long end2 = System.nanoTime(); System.out.println("第"+temp+"次获取i值所用时间"+(end2-begin2)+"ns"); } } int temp1=0; System.out.print("LinkedList获取元素的时间\n"); for(int j=0;j<linlist.size();j++){ if(j%40000==0){ temp1++; long begin3 = System.nanoTime(); System.out.println(linlist.get(j)); long end3 = System.nanoTime(); System.out.println("第"+temp1+"次获取i值所用时间"+(end3-begin3)+"ns"); } }
运行结果:
2.对于链表(LinkedList)而言,add和remove操作要快很多。
但是实际情况来看,如果是单条数据的插入LinkedList反而没有ArrayList快
例子:
long begin = System.nanoTime(); for(int i=0;i<200000;i++){ arrlist.add("data"); } long end = System.nanoTime(); System.out.print((end-begin)+"ns"); System.out.print("\n"); long begin1 = System.nanoTime(); for(int i=0;i<200000;i++){ linlist.add("data"); } long end1 = System.nanoTime(); System.out.print((end1-begin1)+"ns"); System.out.print("\n");
运行结果:
但是如果是随机的批量增加删除数据,LinkedList是比ArrayList快多了的。(实验未验证)
3.LinkedList的方法较丰富。有getFirst(),getLast()这些都是ArrayList没有的。
4.总结:
查询操作用ArrayList,插入删除用LinkedList。
数据不是很庞大,没必要纠结。
标签:
原文地址:http://www.cnblogs.com/Rui-Jia/p/5415178.html