zoukankan      html  css  js  c++  java
  • C# 中数组、ArrayList、List<T> 区别

    一:数组

    //定义
    string[] strs = new string[5];
     
    //赋值 
    strs[0] = "A";
    strs[1] = "B";
    
    //修改
    strs[1] = "C";
    
    //取值
    string getStr = strs[1];

    优点:数组在内存中是连续存储的、所以它的索引速度是非常快的、时间复杂度为O(1)、而且它的赋值/修改/获取元素也是非常简单的。

    缺点:1、定义数组的时候需要指定数组的长度(过长会造成内存浪费、过短会导致程序异常System.IndexOutOfRangeException:"索引超出数组界限")

       2、插入和删除元素效率低、也比较麻烦。

    在不清楚数组长度的时候、就很尴尬了。 所以C#提供了ArrayList了来处理这些问题...

    二:ArrayList

    使用大小会根据需要动态增加的数组。

    //初始化
    ArrayList list = new ArrayList();
    
    //添加元素
    list.Add(1);
    list.Add("A");
    list.Add(0.1);
    
    //修改元素
    list[2] = "B";
    
    //指定索引插入元素
    list.Insert(1, "ABC");
                
    //移除元素
    list.RemoveAt(1);

    优点:1、ArrayList大小会根据需要动态增加的数组。

       2、实现了IList接口、可以方便的对数据进行添加、插入和删除。

    缺点:1、ArrayList会把插入的数据都当做object类型来存储、在操作数据的时候可能会因为类型不匹配而出现异常、它是非类型安全的对象。

       2、由于存储的是object类型、在使用的时候进行类型转换、会造成装箱拆箱、从而损耗性能。

        装箱:把值类型转换成引用类型;

        拆箱:把引用类型转换成值类型。

    //装箱
        int i = 1;
        object obj = (object)i;
    
        //拆箱
        int j = (int)obj;

    由于ArrayList存在类型不安全、装箱拆箱损耗性能。.NET Framework 2.0 推出了List<T>

    三:List<T>

    表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

    //初始化
    List<int> list = new List<int>();
    
    //添加
    list.Add(12);
    list.Add(34);
    
    //编译器会进行类型验证、下面代码编译失败
    //list.Add("ABC");
    
    //修改
    list[0] = 1;
    
    //移除
    list.RemoveAt(0);

    优点:由于泛型List是强类型、编译器会验证类型安全。这样就避免了类型的不安全、以及数据强制转换导致装箱拆箱损耗性能。

    原文来自:https://www.cnblogs.com/chris-zeng/p/10540291.html

  • 相关阅读:
    [考试反思]1008csp-s模拟测试65:突袭
    [考试反思]1008csp-s模拟测试64:契机
    [考试反思]1007csp-s模拟测试63:朦胧
    [考试反思]1006csp-s模拟测试62:隔断
    [考试反思]1005csp-s模拟测试61:休止
    [毒瘤题]玛里苟斯:线性基,表达式分析,测试点分治
    albus就是要第一个出场:线性基
    [考试反思]1005csp-s模拟测试60:招魂
    [考试反思]1004csp-s模拟测试59:惊醒
    [考试反思]1003csp-s模拟测试58:沉淀
  • 原文地址:https://www.cnblogs.com/parkerchen/p/12891786.html
Copyright © 2011-2022 走看看