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

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

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
array(数组)、arraylist、llist、Dictionanary、SortedList、hashtable、Stack、Queue的对比分析

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

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档