ArrayList和LinkedList的区别

一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
    这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.
因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。  这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。

for(int m=0;m<20000;m++){
        linkedlist.add(m,null);      //当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在
        }
        long time4 = new Dte().getTime();
        System.out.print("batch linkedlist add:");
        System.out.println(time4 - time3);
        for(int n=0;n<20000;n++){
        arraylist.add(n, null);  //当在200000条数据之前插入20000条数据时,ArrayList用了18375多ms.时间花费是arraylist的近20倍(视测试时机器性能)
        }
        long time5 = new Date().getTime();
        System.out.print("batch arraylist add:");
        System.out.println(time5 - time4);

4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.
这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。我做过一个插入和删除200000条数据的试验。

        long time1 = new Date().getTime();
        String s1 = (String) linkedlist.get(100000);//  总记录200000,linkedlist加载第100000条数据耗时15~32ms不等
        long time2 = new Date().getTime();
        System.out.println(time2 - time1);
        String s2 = (String) arraylist.get(100000);//  总记录200000,linkedlist加载第100000条数据耗时0ms
        long time3 = new Date().getTime();
        System.out.println(time3 - time2);

 

    /*分别insert200000条数据到linkedlist和arraylist
    *由于是在末尾插入数据,arraylist的速度比linkedlist的速度反而要快 
    */
    public static void insertList(LinkedList linklist, ArrayList arraylist) {
        long time1 = new Date().getTime();
        System.out.println(time1);
        for (int i = 0; i < 200000; i++) {
            linklist.add(i, "linklist" + i);
        }
        long time2 = new Date().getTime();
        System.out.println(time2 - time1);
        for (int j = 0; j < 200000; j++) {
            arraylist.add(j, "arraylist" + j);
        }
        long time3 = new Date().getTime();
        System.out.println(time3 - time2);
    }


/*delete linkedlist和arraylist中的200000条数据
    *由于是在末尾删除数据,arraylist的速度比linkedlist的速度反而要快 
    */
    public static void deleteList(LinkedList linklist, ArrayList arraylist) {
        long time1 = new Date().getTime();
        System.out.println(time1);
        for (int i = 199999; i >= 0; i--) {
            linklist.remove(i);
        }
        long time2 = new Date().getTime();
        System.out.println(time2 - time1);
        for (int j = 199999; j >= 0; j--) {
            arraylist.remove(j);
        }
        long time3 = new Date().getTime();
        System.out.println(time3 - time2);
    }

    public static void main(String args[]) {
        LinkedList linkedlist = new LinkedList();
        ArrayList arraylist = new ArrayList();
        insertList(linkedlist, arraylist);

                                        //以下代码省略

插入:
LinkedList 578ms
ArrayList 437ms
删除:
LinkedList 31ms
ArrayList 16ms

时间: 2024-08-01 13:18:11

ArrayList和LinkedList的区别的相关文章

java集合框架05——ArrayList和LinkedList的区别

本文为博主原创文章,转载请注明出处:http://blog.csdn.net/eson_15/article/details/51145788 前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括         先来回顾一下List在Collection中的的框架图:     从图中我们可以看出:         1. List是一个接口,它继承与Collection接口,代表有序的队列.       

jsp ArrayList和LinkedList的区别及ArrayList的特点

网页特效phttp://www.111cn.net/网页特效p.html target=_blank >jsp教程 arraylist和linkedlist的区别及arraylist的特点 arraylist)   private transient object[] elementdata;      //------------------------------      (linkedlist)   private transient entry<e> header = new

比较List和ArrayList的性能及ArrayList和LinkedList优缺点

List和ArrayList的性能比较 在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,而使用泛型集合就没有这样的问题.List是泛型,而ArrayList是非泛型.存数据岛ArrayList都需要专程object,读取又要转换成相应的数据类型,List则不需要. //用来记录开始和结束的时间  DateTime startTime = new DateTime();  DateTime endTime = new DateTime(); //定义集

[Java] ArrayList、LinkedList、Vector的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 首先我们来看一下继承关系: 我们可以看出ArrayList.LinkedList.Vector都实现了List的接口.  接下来分别看一下三个数据结构的说明. public class ArrayList extends AbstractList  implements List, RandomAccess, Cloneable, Serializable List 接口的大小可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的

Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针. 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references).例如

深入理解ArrayList 和 LinkedList 区别

ArrayList的内部实现是基于数组,因此,它使用get方法访问列表中的任意一个元素时,它的速度要比LinkedList快.LinkedList的内部实现是基于链表的,LinkedList中的get方法是按顺序从列表的一端到另一端.对LinkedList而言,只有这种查找方法. Bruca Eckel描述如下: Java编程思想对List的描述(4版P233): 基本的ArrayList,它长于随机访问,但是在List的中间插入和一处速度较慢. LinkedList,它通过代价较低的在List

.NET Framework源码研究系列之---ArrayList与LinkedList

在上一篇<.NET Framework源码研究系列之---马甲List>中我们一起研究了.NET中 List的源代码,也得到一些兄弟的热心反馈.其中一位仁兄说希望看到ArrayList与LinkedList源 代码,所以今天就以此为话题,大家一起看一下.NET中是如何实现ArrayList和LinkedList 的. 我们先看ArrayList和LinkedList在.NET中的位置,ArrayList的命名空间是 System.Collections,LinkedList的命名空间是Syst

Java 容器 &amp; 泛型:二、ArrayList 、LinkedList和Vector比较

一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素.实现List的有:ArrayList.LinkedList.Vector.Stack等.值得一提的是,Vector在JDK1.1的时候就有了,而List在JDK1.2的时候出现,待会我们会聊到ArrayList和Vector的区别.  

java中ArrayList 、LinkList的区别分析_java

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处.(参考数组与链表来思考)     3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间. ArrayList和LinkedL