欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 中数组、ArrayList、List 区别

程序员文章站 2022-06-28 20:58:47
一:数组 优点:数组在内存中是连续存储的、所以它的索引速度是非常快的、时间复杂度为O(1)、而且它的赋值/修改/获取元素也是非常简单的。 缺点:1、定义数组的时候需要指定数组的长度(过长会造成内存浪费、过短会导致程序异常System.IndexOutOfRangeException:"索引超出数组界 ......

一:数组

//定义
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是强类型、编译器会验证类型安全。这样就避免了类型的不安全、以及数据强制转换导致装箱拆箱损耗性能。