Java中LinkedList和ArrayList的区别

首先亮一下他们两个基本区别,面试的时候可以用来和面试官唠嗑啊 1、ArrayList实现了基本动态数组结构,Linked基于链表的结构。链表?什么是链表?答:“链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中指针连接次序实现的”注:此句话通过了科普中国百科科学词条编写与应用工作项目的审核。 2、对于get和set,ArrayList的性能优于LinkedList,因为Linked要移动指针,麻烦的很 3、对于add和remove,LinkedList要优于ArrayList,,因为链表就擅长这个,ArrayList还要移动数据 LinkedList和ArrayList是两个集合类,用于存储一系列的对象引用(references)。例如我们用ArrayList来存储一系列String或者Integer。那么ArrayList和LinkedList在性能上有什么差别? 假如我们有一个很大的列表,里面的元素已经排好序,我们对这个列进行二分查找(binary search),比较两种List的速度,源码如下:

public class TestList {public static final int N = 50000;public static List<Integer> values;static{Integer vals[] = new Integer[N];Random random = new Random();for(int i=0,currval=0;i<N;i++){vals[i] = new Integer(currval);currval += random.nextInt(100)+1;}values = Arrays.asList(vals);}static long timeList(List<Integer> lst){long start = System.currentTimeMillis();for(int i=0;i<N;i++){int index = Collections.binarySearch(lst, values.get(i));if(index != i){System.out.println(“error occoured “);}}return System.currentTimeMillis() – start;}(String[] args){System.out.println(“ArrayList的耗时:”+timeList(new ArrayList<Integer>(values)));System.out.println(“LinkedList的耗时:”+timeList(new LinkedList<Integer>(values)));}}

ArrayList的耗时:12 LinkedList的耗时:5346 很明显,ArrayList的时间明显小于LinkedList。二分法查找使用的是随机访问策略,而LinkedList是不支持快速随机访问的。 下面再看一个对List进行大量增加和删除的例子:

public class ListDemo {public static final int N = 50000;static long timeList(List<Object> list){long start = System.currentTimeMillis();Object o = new Object();for(int i=0;i<N;i++){list.add(o);}return System.currentTimeMillis() – start;}(String[] args) {System.out.println(“ArrayList的耗时:”+timeList(new ArrayList<Object>()));System.out.println(“LinkedList的耗时:”+timeList(new LinkedList<Object>()));}}

ArrayList的耗时:5 LinkedList的耗时:4 结果是出乎我的意料之外的,我把N分别设置为了5000、500000他们的耗时都非常接近,看来理论知识与现实情况还有有一定的差距。当我将N增到至500W的时候LinkedList的耗时竟然超过了ArrayList。希望看到我的文章的知道真相的大神们可以给我讲解下,谢谢。

有我们特有的记忆,亲情之忆友谊之花爱情之树以及遗憾之泪!

Java中LinkedList和ArrayList的区别

相关文章:

你感兴趣的文章:

标签云: