您的位置:首页 > 理论基础 > 数据结构算法

.NET中常用的知识点--数组、ArrayList和List的区别

2017-02-20 17:21 218 查看
数组、List和ArrayList的区别:1. 数组概述:数组是一种数据结构,包含同一类型的多个元素。    优点: 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值和修改元素也很简单:     
 //初始化
string[] s=new string[3];
//赋值
s[0]="a"; s[1]="b"; s[2]="c";
//修改
s[1]="b1";
     缺点: 声明数组是,必须同时指明数组的长度。                  数组长度过长,会造成内存浪费,数组长度过短,会造成数据溢出的错误。                  所以在不确定数组长度的情况下,就需要用到ArrayList了。2.ArrayList概述:ArrayList是.net Framework提供的用于数据存储和检索的专用类。   命名空间:System.Collections下的一部分。   继承接口:IList接口。   优点:大小按照其中存储的数据来动态扩充与收缩,灵活方便。              声明时不需要指定它的长度。
//声明
ArrayList list = new ArrayList();
//新增数据
list.Add("abc"); list.Add(123);
//修改数据
list[2] = 345;
//移除数据
list.RemoveAt(0);
//插入数据
list.Insert(0, "hello world");
     缺点:ArrayList会把所有插入其中的数据都当做object类型来处理。               ArrayList是类型不安全的。比如:在我们插入值类型1,2,3后,再在后边插入引用类型‘a’,'b','c',会报类型不匹配的错误。               性能损失很大。比如:我们在插入同一类型的数据时,ArrayList还是会见他们转化为object类型,这就存在了装箱与拆箱的操作,会带来很大的性能损耗。               所以需要用到List.3. List概述:List类似ArrayList类的泛型等效类。                       List是一个具体的实现类。                       继承了IList接口。                       声明时需要为其声明List集合内数据的对象类型。如:List<int> lsstr=new List<int>();                       List不能被构造。     优点:类型安全:
//声明
List<int> list = new List<int>();
//新增数据
list.Add(123);
//修改数据
list[0] = 345;
//移除数据
list.RemoveAt(0);
    上例中。如果我们往List<int> 集合中插入string字符‘hello‘,IDE就会报错,不能通过编译,这样就避免了类型安全问题与装箱拆箱的性能问题了。     ArrayList和List的区别:     List不能被构造,而ArrayList可以被构造。     
List list=new List();    //错误,不能被构造
ArrayList alist=new ArrayList();   //正确,可以被构造
List<string> lsstr=new List<int>();  //正确的写法
//注意:
List list=new ArrayList();//正确,将ArrayList转化为了List,此时使用的List的属性和方法。
ArrayList alist=new ArrayList();//正确,此时使用的是ArrayList的属性和方法。
4.扩展:    装箱与拆箱:1.装箱:值类型转换为引用类型为装箱。比如:int A=3, object B=(object)A;                            2.拆箱:引用类型转换为值类型为拆箱。比如:object A='3', int B=(int)A;   泛型:概念:泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。                           泛型为.net框架引入了类型参数(type parameters)的概念。类型参数在设计类和方法时,不必确定一个或多个具体参数,其中的具体参数可延迟到客户代码中                            声明和实现,比如MyList<T> ; 客户代码这样调用。MyList<int>,MyList<string>或者MyList<MyClass>。避免了运行时类型转换或装箱操作的代价和风险。此为整理后发布,原博客地址:http://www.cnblogs.com/a164266729/p/4561651.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息