array(数组)、arraylist、llist、Dictionanary、SortedList、hashtable、Stack、Queue的对比分析

array(数组)、arraylist、llist、Dictionanary、SortedList、hashtable、Stack、Queue的对比分析2011年05月16日星期一04:49各种集合类的分析在c#中用,经常用特定集合的形式来存储有一定规律的数据。这个集合目前有以下几种ArrayArraylistListHashtableDictionaryStackQueue泛型。而这些可以分为三大类,数组、集合类、泛型。这三大类也是c#对集合数据处理的演化过程。通过以下区别可以更好的在开发过程中进行择优选择,提高程式性能。一:数组与集合的区别1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的2.数组要声明元素的类型,集合类的元素类型却是object.3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!总之一句话,数组初始时已经分配容量大小,即数组大小不可变。集合是可变的二:泛型与集合的区别泛型听起来很高深的一个词,但实际上它的作用很简单,就是提高c#程序的性能。比如在计算机中经常用到一些数据结构,如队列,链表等,而其中的元素以前一般这么定义:objecta=newobject();这样就带来一个严重的问题,用object来表示元素没有逻辑问题,但每次拆箱、封箱就占用了大量的计算机资源,导致程序性能低下,而这部分内容恰恰一般都是程序的核心部分,如果使用object,那么程序的表现就比较糟糕。而使用泛型则很好的解决这个问题,本质就是在编译阶段就告诉编译器,数据结构中元素的种类,既然编译器知道了元素的种类,自然就避免了拆箱、封箱的操作,从而显著提高c#程序的性能。比如List<string>就直接使用string对象作为List的元素,而避免使用object对象带来的封箱、拆箱操作,从而提高程序性能。以下分别对其用法进行举例一数组Arrayint[]intArray1;//初始化已声明的一维数组,并标明数据类型intArray1=newint[3];//实例时必须标明数组长度。intArray1=newint[3]{1,2,3};intArray1=newint[]{1,2,3};stringss="233,456";string[]ass=ss.Split(newchar[]{','});//等价于string[]ass1=ss.Split(',');stringstr=string.Join(",",ass);//结果str="233,456"stringstr1=string.Concat(ass);//结果str1="233456"数组通过下标的形式来找到指定的数据。数组缺点是其长度不可变,并且插入删除时效能低,操作麻烦。二ArrayList类ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充方法1:Add()向数组中添加一个元素,2:Remove()删除数组中的一个元素3:RemoveAt(inti)删除数组中索引值为i的元素4:Reverse()反转数组的元素5:Sort()以从小到大的顺序排列数组的元素6:Clone()复制一个数组三List可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法在决定使用List还是使用ArrayList类(两者具有类似的功能)时,记住List类在大多数情况下执行得更好并且是类型安全的。如果对List类的类型T使用引用类型,则两个类的行为是完全相同的。但是,如果对类型T使用值类型,则需要考虑实现和装箱问题。如果对类型T使用值类型,则编译器将特别针对该值类型生成List类的实现。这意味着不必对List对象的列表元素进行装箱就可以使用该元素,并且在创建大约500个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。1、List<T>类既使用相等比较器又使用排序比较器。诸如Contains、IndexOf、LastIndexOf和Remove这样的方法对列表元素使用相等比较器。类型T的默认相等比较器按如下方式确定。如果类型T实现IEquatable<T>泛型接口,则相等比较器为该接口的Equals(T)方法;否则,默认相等比较器为Object.Equals(Object)。诸如BinarySearch和Sort这样的方法对列表元素使用排序比较器。类型T的默认比较器按如下方式确定。如果类型T实现IComparable<T...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?