zoukankan      html  css  js  c++  java
  • C#数组,ArrayList,List区别

    共同点:都能存储一组对象

    数组:在内存中时连续存储的,所以索引很快,赋值与修改元素很快,事件复杂度为O(1),折半查找法查找元素效率高。

       增添删除元素的时候需要移动大量元素,因此提供了ArrayList对象

       string[] s = new string[3];

       s[0] = "a";    //赋值

       s[0] = "a1";    //修改

    ArrayList: 来自于命名空间System.Collections,他的大小时按照其中存储的数据来动态扩充与收缩的,所以我们在申明

         ArrayList对象的时候不需要指定长度

      ArrayList list = new ArrayList();

      list.Add("abc");  //新增数据

      list.Add("123");  

      list[2] = 345;       //修改数据

      list.RemoveAt(0);  //移除数据

      list.Insert(0,"hello C#");  //出入数据

      注:我们看实例,在list中不仅插入了字符串还有数字,这样在ArrayList中插入不同类型的数据是不允许的。因为这样

        ArrayList会把所有插入其中的数据都当作成object类型来处理。当我们使用ArrayList里的数据时会报类型不匹配错误。

        但即使插入数据时保证数据类型一致,在使用时也要将他转化为对应的原类型来处理,带来性能损耗,这就是拆装箱。

        装箱:就是把值类型的数据打包到引用类型的实例中。

        int i = 123;   object x = (object)i;    //把值类型123赋给object类型的对象x

        拆箱:从引用类型转变成值类型

        object x = 123;int i = (int)x;      //把引用类型123赋值给值类型的变量i

    泛型List:由于ArrayList存在拆装箱的性能损耗,后来就有了泛型的概念

        List<int> list = new List<int>();

        list.Add(123);     //添加数据

        list.Add[0] =345;     //修改数据

        list.RemoveAt(0);   //移除数据

      注:上例中,我们插入string字符"helo,C#",IDE就会报错,避免了拆装箱的性能问题了。

  • 相关阅读:
    《Linux系统free命令的使用》学习笔记
    《postfix MAIL服务搭建(第一篇):》RHEL6
    RHEL(RedHat Enterprise Linux)5/6 ISO镜像下载
    《samba搭建win客户端和linux客户端的区别》
    《怎样实现通过shell脚本将用户踢出系统》
    《DDNS服务器的搭建和案例解决方法》
    《Usermod:user lee is currently logged in 家目录不能改变解决方法》
    你们看不懂为什么写这个博客吧
    JS几种数组遍历方式以及性能分析对比
    从概念到业务来看 To B 和 To C 产品区别在哪?
  • 原文地址:https://www.cnblogs.com/HansZimmer/p/9082568.html
Copyright © 2011-2022 走看看