zoukankan      html  css  js  c++  java
  • 比较List和ArrayList的性能及ArrayList和LinkedList优缺点

    List和ArrayList的性能比较



    在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,而使用泛型集合就没有这样的问题。List是泛型,而ArrayList是非泛型。存数据岛ArrayList都需要专程object,读取又要转换成相应的数据类型,List则不需要。


    //用来记录开始和结束的时间
     DateTime startTime = new DateTime();
     DateTime endTime = new DateTime();
    //定义集合类型ArrayList的一个实例
     ArrayList list = new ArrayList();
    //取得当前时间
     startTime = DateTime.Now;
    //★★★★★★★★①使用ArrayList类★★★★★★★★
     //ArrayList的add方法的参数是Object型,
     //当我们把int型作为参数传入的时候需要做装箱操作
     //装箱操作将值类型转化为Object类型
     for (int i = 0; i < 1000000; i++)
     {
     list.Add(i);
     }
    int iCount = 0;
     //当我们使用int型的时候需要做拆箱操作操作
     //拆箱操作将应用类型转化为Object类型,拆箱过程要做大量的工作
     foreach (int i in list)
     {
     iCount += 1;
     }
    Console.WriteLine("使用ArrayList的结果 : {0}", iCount.ToString());
    //取得结束时间并计算差值
     endTime = DateTime.Now;
     TimeSpan ts = endTime - startTime;
    Console.WriteLine("使用ArrayList的耗时 :" + ts.TotalMilliseconds);
    //★★★★★★★★②使用泛型类★★★★★★★★
     //使用List的泛型定义List<T>,int类型在编译器动态生成的类中本替换为int型
     //执行过程中不再执行装箱拆箱操作
     List<int> list2 = new List<int>();
    startTime = DateTime.Now;
    for (int i = 0; i < 1000000; i++)
     {
     list2.Add(i);
     }
    iCount = 0;
     foreach (int i in list2)
     {
     iCount += 1;
     }
    Console.WriteLine("使用泛型的结果 : {0}", iCount.ToString());
    endTime = DateTime.Now;
     ts = endTime - startTime;
    Console.WriteLine("使用泛型的耗时 :" + ts.TotalMilliseconds);
    //显示三次结果如下
    /* 第一次
     * 使用ArrayList的耗时 :92
     * 使用泛型的耗时 :25
     *
     * 第二次
     * 使用ArrayList的耗时 :96
     * 使用泛型的耗时 :22
     *
     * 第三次
     * 使用ArrayList的耗时 :90
     * 使用泛型的耗时 :22
     *
     * 由此可以明显看出两者的差别
     * 这里仅仅是时间上的,并不包括对内存消耗的统计
     *
     * ※但是也要注意到差别的单位是毫秒,
     * 我这里只想说明用泛型是有好处的,
     * 但也不可过分追求程序的孰优孰劣,
     * 总之要把握好这个度,适合自己的才是最好的
     * O(∩_∩)O~
     */
    Console.Read();

    ArrayList和LinkedList优缺点



    java编程中我们用最多的几个类可以就是String,ArrayList,HashMap了.特别是ArrayList我们几乎无人不知,甚至有乱用的嫌疑了我们来看看ArrayList和LinkedList的区别.故名思意ArrayList是数组表,LinkedList是链接表.ArrayList的所有数据是在同一个地址上,而LinkedList的每个数据都拥有自己的地址.

    我们来比较一下常用的数据的插入,数据的删除,数据的更新,数据查询.

    数据插入 :比如在i节点插入一个新数据

       ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index加1. ->操作多

       LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了.  ->操作少

       结论:平均效率LinkedList要好.

    数据删除 :比如删除i节点数据

       ArrayList:循环到i节点,然后把i节点后面的所有的数据的index减1. ->操作多

       LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了.  ->操作少

       结论:平均效率LinkedList要好.

    数据查询 :比如查询i节点数据

       ArrayList:循环到i节点. ->操作少

       LinkedList:循环到i节点.  ->操作少,但由于每个数据的地址不一样,查询比如 ArrayList慢.

       结论:平均效率 ArrayList要好.

    数据更新 :比如更新i节点数据

       ArrayList:循环到i节点,把数据更新. ->操作少

       LinkedList:循环到i节点,把前数据更新.  ->操作少,但由于查询速度没有 ArrayList好,所有效率没有 ArrayList好.

       结论:平均效率ArrayList要好.

    这样我们就可以看到各有优点.

    如果查询操作较多ArrayList的效果更好.如果删除,插入较多LinkedList的效果较好.具体怎么用还看具体的需求.

    以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int , 数据 , arraylist , 效率 , 类型 时间 arraylist linkedlist、linkedarraylist、linkedlist、java linkedlist、linkedlist线程安全,以便于您获取更多的相关知识。

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/Seachal/p/7113085.html
Copyright © 2011-2022 走看看