码迷,mamicode.com
首页 > 编程语言 > 详细

Java中LinkedList和ArrayList的区别

时间:2015-05-18 14:48:04      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:java   基础   arraylist   linkedlist   

首先亮一下他们两个基本区别,面试的时候可以用来和面试官唠嗑啊
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;
    }

    public static void main(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;
    }

    public static void main(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的区别

标签:java   基础   arraylist   linkedlist   

原文地址:http://blog.csdn.net/fuyuwei2015/article/details/45821063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!