数组、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