仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 761|回复: 8
打印 上一主题 下一主题

[学习教程] NET网页编程之C#中数组,ArrayList与List工具的区分

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:21:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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#的脚步。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 13:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表