• 比较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线程安全,以便于您获取更多的相关知识。

  • 相关阅读:
    常见的问题系列【什么是子网掩码?】
    K8s系列【KubeSphere多租户账号创建流程】
    K8s系列【卸载K8s】
    K8s系列【Linux多节点部署KubeSphere】
    K8s系列【KubeSphere部署完mysql8.0再部署mysql5.0导致mysql5.0启动失败的问题】
    K8s系列【安装nfs文件系统(为k8s提供动态创建pv的能力)】
    K8s系列【Linux单节点部署KubeSphere】
    K8s系列【资源不足:0/3 nodes are available: 1 Insufficient cpu, 2 node(s) had taint {noderole.kubernetes.io/master: }, that the pod didn't tolerate】
    K8s系列【KubeSphere部署Mysql】
    idea格式化快捷键无效
  • 原文地址:https://www.cnblogs.com/Seachal/p/7113085.html
Copyright © 2020-2023  润新知