|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。在C#中,当我们想要存储一组工具的时分,就会想到用数组,ArrayList,List这三个工具了。那末这三者究竟有甚么样的区分呢?
我们先来懂得一下数组,由于数组在C#中是最早呈现的。
数组
数组有良多的长处,好比说数组在内存中是一连存储的,以是它的索引速率长短常的快,并且赋值与修正元素也很复杂,好比:
string[]s=newstring[3];
//赋值
s[0]="a";
s[1]="b";
s[2]="c";
//修正
s[1]="b1";
可是,数组也存在一些不敷的中央。好比在数组的两个数据间拔出数据也是很贫苦的。另有我们在声明数组的时分,必需同时指明数组的长度,数组的长渡过长,会形成内存华侈,数组和长渡过短,会形成数据溢出的毛病。如许假如在声明数组时我们其实不分明数组的长度,就变的很辣手了。
针关于数组的这些弱点,C#中开始供应了ArrayList工具来克制这些弱点。
ArrayList
ArrayList是.NetFramework供应的用于数据存储和检索的公用类,它是定名空间System.Collections下的一部分。它的巨细是依照个中存储的数据来静态扩大与压缩的。以是,我们在声明ArrayList工具时其实不必要指定它的长度。
ArrayList承继了IList接口,以是它能够很便利的举行数据的增加,拔出和移除.好比:
ArrayListlist=newArrayList();
//新增数据
list.Add("abc");
list.Add(123);
//修正数据
list[2]=345;
//移除数据
list.RemoveAt(0);
//拔出数据
list.Insert(0,"helloworld");
从下面示例看,ArrayList仿佛是办理了数组中一切的弱点,那末它应当就是完善的了,为何在C#2.0后又会呈现List呢?
仍是从下面的示例看,在list中,我们不但拔出了字符串"abc",并且又拔出了数字123。如许在ArrayList中拔出分歧范例的数据是同意的。由于ArrayList会把一切拔出个中的数据都看成为object范例来处置。如许,在我们利用ArrayList中的数据来处置成绩的时分,极可能会报范例不婚配的毛病,也就是说ArrayList不是范例平安的。既使我们包管在拔出数据的时分都很当心,都有拔出了统一范例的数据,但在利用的时分,我们也必要将它们转化为对应的原范例来处置。这就存在了装箱与拆箱的操纵,会带来很年夜的功能消耗。
交叉一下装箱与拆箱的观点:
复杂的来说:
装箱:就是将值范例的数据打包到援用范例的实例中
好比将int范例的值123赋给object工具o
inti=123;
objecto=(object)i;
拆箱:就是从援用数据中提取值范例
好比将object工具o的值赋给int范例的变量i
objecto=123;
inti=(int)o;
装箱与拆箱的历程是很消耗功能的。
泛型List
恰是由于ArrayList存在不平安范例与装箱拆箱的弱点,以是在C#2.0后呈现了泛型的观点。而List类是ArrayList类的泛型等效类。它的年夜部分用法都与ArrayList类似,由于List类也承继了IList接口。最关头的区分在于,在声明List汇合时,我们同时必要为其声明List汇合内数据的工具范例。
好比:
List<int>list=newList<int>();
//新增数据
list.Add(123);
//修正数据
list[0]=345;
//移除数据
list.RemoveAt(0);
上例中,假如我们往List汇合中拔出string字符"helloworld",IDE就会报错,且不克不及经由过程编译。如许就制止了后面讲的范例平安成绩与装箱拆箱的功能成绩了。也许C#刚上市的时候有些抄袭Java吧,但自从C#2.0上市之后,整个局面就扭转乾坤了,不但Java在模仿C#,而且他从来都没能跟得上C#的脚步。 |
|