




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章数组和集合C#语言提供了好多数据结构,使用它们能给我们编程带来了很大的方便。它们包括数组、ArrayList、Queue、Stack、Hashtable和SortedList等。数据结构是由基本类型数据按一定规则组成的,学习数据结构,就是要学会规则。这一章的主要内容如下:数组的应用集合的应用动态数组队列、堆栈哈希表应用9.1数组数组是一种数据结构,其中包含一些可透过计算得到之索引来存取的变量。数组中所包含的变量,又称为数组的元素,都具有相同型别,而此型别就叫做数组的元素型别。数组具有阵序规范(RankSpecifier),此阵序规范可决定与每一个数组元素关联的索引数目。数组的阵序规范也称为数组的维度(Dimension)。阵序规范为1的数组称为一维数组。阵序规范大于1的数组则称为多维数组。特定大小的多维数组通常称为二维数组、三维数组等。数组的每个维度都具有关联长度,这个长度是一个大于或等于0的整数。维度长度不是数组型别的一部分,而是在执行阶段产生数组型别(ArrayType)执行个体时所建立。维度长度决定该维度的有效索引范围:长度为N的维度,索引范围是从0至N–1。9.1.1应用一维数组数组必须先定义,后使用。数组的定义采用以下方式:<type>[]<name>其中Type可以是任意的类型,name是数组的名称。数组可以通过两种方式进行初始化,第一种方式是完整的指定数组的内容;第二种方式是指定数组的长度,并使用new关键字初始化所有的数组元素。int[]intArray={1,2,3}等价于:int[]intArrayintArray={1,2,3};9.1.2应用二维数组和多维数组数组可以有多个维度,当为二个维度时,就叫二维数组。不管它有几个维度,与一维数组没多大差别。每行长度相同的数组称为矩形数组。每行长度不同的数组叫锯齿型数组。声明一个二维的矩形数组的语法为:type[,]arraryName=newtype[numberRows,numberCols];9.1.3应用交错数组数组的元素不仅可以是同一种类型的数值,同时还可以是数组。元素为数组的数组,就叫交错数组,每个元素纬度和大小可以不同。要创建一个行数固定,列数可变的数组,语法为:Type[][[]arrayName=newtype[numberRows][];arrnyName[0]=newtype[numberCols0];arrnyName[1]=newtype[numberCols1];arrnyName[2]=newtype[numberCols2];arrnyName[numberRows-1]=newtype[numberCols];或者:arraryName=newtype[3]{newint[numberCols0],newint[numberCols0],newint[numberCols0]};
9.2数组使用在程序设计方面,数组的用途非常大。为了方便用户的使用,C#提供了许多属性和方法等来支持数组的操作。要想学好数组,对这些方法和属性的掌握是十分必要的。9.2.1数组简单应用System.Array类是C#语言中各种数组的基类。1.数组的索引2.数组遍历属性/方法说明IsFixedSize指示Array是否具有固定大小。Length获得一个32位整数,表示Array的所有维数中元素的总数Rank获取Array的秩(维数)SyncRoot获取可用于同步对Array的访问的对象BinarySearch使用二进制搜索算法在一维的排序Array中搜索值Clone创建Array的浅表副本Copy/CopyTo将一个Array的一部分复制到另一个Array中GetLength获取一个32位整数,表示Array的指定维中的元素。GetLowerBound/GetUpperBound获取Array的指定维度的下/上限GetValue/SetValue获取/设置Array中的指定元素值IndexOf/LastIndexOf返回一维Array或部分Array中某个值第一个/最后一个匹配项索引Sort对一维Array对象中的元素进行排序9.2.2数组元素的清空由于数组的大小是不可以变的,因为其是在初始化时就已经确定,因此数组元素的清空只将部分元素设置为0、False、或空,这和数组元素的类型有关。为此,C#中提供了Array.Clear()方法。Array.Clear方法的定义如下:publicstaticvoidClear(Arrayarray,intindex,intlength)参数Array为要进行删除操作的数组,index为要清除的一系列的起始索引,length为要清除的元素数。9.2.3数组元素的查找C#为数组提供了Array.IndexOf和Array.LastIndexOf方法,用于查找数组中的元素。Array.IndexOf方法的定义如下:Array.IndexOf(Array,,Object)Array.IndexOf(Array,Object,Int32)Array.IndexOf(Array,Object,Int32,Int32)以上三种方法分别提供搜索指定的对象Object,第一种方法返回数组Array中从开始元素到最后一个元素这部分元素中第一个匹配项的索引;而第二种方法返回的是从指定索引开始到最后一个元素间这部分元素中搜索到索引;第三种方法返回的是从指定索引开始指定个数的元素中搜索到索引。9.2.4数组元素的排序虽然遍历的方法可以对数组进行排序,但是却非常麻烦。因此C#提供了用于排序的方法Array.Sort和Array.Reverse,Array.Sort方法用于对一维数组对象中的元素进行排序,Array.Reverse方法用于反转一维数组对象中元素的顺序。Array.Sort方法的定义如下。publicstaticvoidSort(Arrayarray)publicstaicvoidSort(Arrayarray,Intindex,Intlength)9.3集合C#语言提供了许多方法来实现集合。我们在上一节中讨论了标准的C#数组语法,在本小节中,我们将要学习System.Collections命名空间所包含的接口。这些接口为所有的C#集合类型定义了框架。9.3.1ICollection接口基本知识ICollection接口定义了对所有集合类通用的属性和方法。其被接口IList和Idictionary继承,由类ArrayList、CollectionBase、DictionaryBase、Hashtable、Queue、SortedList和Stack实现。属性说明Count返回ICollection所包含的元素数IsSynchronized当同步访问ICollection时,返回trueSyncRoot返回一个能用来同步访问ICollection的对象9.3.2IEnumerable接口和IEnumerator接口的基本知识IEnumerable接口声明了一个方法支持对集合进行简单的遍历。大部分表示一个元素序列或元素集合的类都将实现这个接口。IEnumerator接口定义了一些属性和方法允许一个枚举器对集合进行简单的遍历。任何作为枚举器使用的类都将实现这个接口。接口IEnumerable的定义格式如下:publicinterfaceIEnumerable其有一个公有实例方法:IEnumeratorGetEnumerator()GetEnumerator()返回一个用于遍历一个集合元素的枚举器。9.4动态数组类ArrayList代表一个能根据需要动态增加大小的一维数组,同时其能包含任何托管类型的元素,而且不要求所有元素都是相同的类型。当需要建立一个对象数组模型却不知道对象数量时,它们会非常有用。9.4.1ArrayList的简单使用ArrayList对象是较为复杂的数组。ArrayList类提供了多数System.Collections类都提供的功能,但这些功能在数组类中没提供。可以将ArrayList看作是扩充了功能的数组。但其不同于数组,其区别如下:数组的容量是固定的,而ArrayList的容量可根据需要自动扩充。ArrayList提供了添加、插入等功能,而数组却没有。ArrayList只提供一维的形式,而数组可以是多维的。9.4.1ArrayList的简单使用属性说明Capacity获取或设置ArrayList包含的元素数Count获取ArrayList实际包含的元素数IsFixedSize获取一个值,该值指示ArrayList是否具有固定的大小IsSynchronized获取一个值,该值指示是否同步对的Array访问IsReadOnly获取一个值,该值指示ArrayList是否为只读Item获取或设置指定索引处的元素SyncRoot获取可用于同步ArrayList访问的对象9.4.2ArrayList元素的添加C#中为ArrayList提供了元素添加的方法,其为ArrayList.Add()。ArrayList.Add方法的定义如下:publicvirtualintAdd(Object)9.4.3ArrayList元素的插入C#中为ArrayList提供了元素插入的方法ArrayList.Insert()。ArrayList.Insert方法的定义如下:publicvirtualvoidInsert(Intindex,Objectvalue)9.4.4ArrayList元素的删除C#中为ArrayList提供了元素删除的方法ArrayList.Clear()。ArrayList.Clear方法的定义如下:publicvirtualvoidClear( )该方法是从调用ArrayList对象中删除了所有元素。即Count属性被设为0,但其容量Capacity属性却不变。9.4.5ArrayList元素的查找同数组一样,ArrayList中也提供了查找其元素的方法,即ArrayList.IndexOf()方法、ArrayList.LastIndexOf()方法和ArrayLst.Contains()方法。由于前两种方法同Array中同名方法的用法基本相同,所以就不一一介绍了,Contains()的定义如下:publicvirtualboolcontains(Objectitem)该方法通过对ArrayList的元素执行一次线性查找,确定调用ArrayList是否包含指定的对象。如果找到对象,方法返回true。9.4.6ArrayList元素的遍历列表可以使用同数组相同的方法对ArrayList进行遍历,即foreach语句。9.4.7ArrayList容量的缩减C#语言提供了TrimToSize方法来缩减ArrayList容量,其定义如下:publicvirtualvoidTrimToSize()该方法用来缩减ArrayList的容量,使它等于ArrayList中的元素数。如果ArrayList是只读或大小固定的,将抛出一个NotSupportedException异常。9.4.8ArrayList向Array的转换C#语言提供了两种方法,使ArrayList转换为Array。分别为ArrayList.ToArray()和ArrayList.ToArray(Type)。其中,第一种方法的定义如下:publicvirtualobject[]ToArray()该方法是将ArrayList转换为一个object数组。如果想转换为固定类型的Array,就该采用第二种方法,但必须设置Type。其定义如下:publicvirtualArrayToArray(Typetype)9.5队列Queue类通常称为队列,它封装了一个先进先出的集合,队列用来储存已入队的先后顺序进行处理的对象。9.5.1Queue简单介绍在队列中,每个Queue对象都有一个容量,如果存储的元素达到了它的容量,这个容量还会自动地增加。Queue对象还具有一个增长系数,它表示了当Queue满时容量的增加值。这个系数可以在Queue的构造函数中设定,默认值为20。Queue是一个比较简单的类型,其构造函数就有4种,下面我们逐一介绍其构造函数,供读者参考:Queue()。Queue(Icollectionc)。Queue(intcapacity)。Queue(intcapacity,floatgrowthFactor)。9.5.2Queue类元素的添加和输出Queue类常用的属性如表9-4所示。属性说明Count返回Queue中包含的元素数。IsReadOnly在Queue为只读时返回true。IsSynchronized指定对Queue的访问是否同步,默认值为false。SyncRoot其提供对Queue的同步访问。9.6堆栈类Stack类通常称为堆栈,它封装了一个先进后出的集合,堆栈与类Queue相似,用来储存已入队的反向顺序进行处理的对象。9.6.1Stack简单介绍在堆栈中,每个Stack对象都有一个容量,如果存储的元素达到了它的容量,这个容量还会自动地增加。Stack是一个比较简单的类型,其构造函数就有3种,下面我们逐一介绍其构造函数,供读者参考:Stack()。Stack(ICollectionc)。Stack(intcapacity)。9.6.2Stack类元素的添加和输出Stack集合的常用属性如表9-6所示。属性说明Count检索包中包含的元素IsReadOnly在Stack为只读时返回true,默认值为falseIsSynchronized指定对Stack对象的访问是否为同步,默认值为falseSyncRoot其提供了对Stack的同步访问9.7哈希表HashTable通常称为哈希表,它表示键(key)/值(value)对的集合,这些键/值对根据键的哈稀代码进行组织。一个对象的哈稀代码可以通过使用IhashCodeProvider接口的实现来获得。9.7.1Hashtable简单使用在哈希表中,键不能为空引用,但值可以。其就像一个字典,可以根据键查到相应的值。Hashtable中的每一个元素都是一个DictionaryEntry结构,而与键和值无关。Hashtable是一个比较复杂的类型,其构造函数就有16种之多,这里只介绍两种常用的,供读者参考:Hashtable()。Hashtable(Int32)。9.7.2Hashtable元素的添加C#为HashTable元素的添加提供了Hashtable.Add方法。其定义如下:publicvirtualvoidAdd(Objectkey,Objectvalue)该方法中,key为要添加的元素的键;value为要添加元素的值。9.7.3Hashtable元素的获取9.7.4Hashtable元素的遍历C#中提供了foreach语句对Hashtable进行遍历。因为Hashtable的元素是一个键/值对,所以使用DictionaryEntry类型来进行遍历。DictionaryEntry表示一个键/值的集合。9.7.5Hashtable元素的删除C#中为Hashtable提供了元素删除的方法Hashtable.Clear()。Hashtable.Clear方法的定义如下:publicvirtualvoidClear( )该方法是从调用Hashtable对象中删除了所有元素。即Count属性被设为0。9.7.6HashTable元素的查找C#中为HashTable的查找提供了以下方法:HashTable.Contains方法。HashTable.ContainsKey方法。HashTable.ContainsValue方法。9.7.7SortedList的简单介绍SortedList与HashTable一样,都是封装了一个键/值对的集合,但是集合中的内容已按照键进行了排序。所以SortedList除了可以通过键访问外,还可以通过下标来访问。SortedList使用两个数组来存储列表的元素:一个用来存储键,一个用来存储值。键通常是字符串型的,并根据字母顺序进行排序。因为需要排序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特许另类投资的动态模型与预测模拟试题及答案
- 世界各大洲地理特征试题及答案
- 2024年全球气候变化行为试题及答案
- 2025企业经营抵押借款合同「标准」
- 2025现代企业合同管理中的法律风险与应对策略研究
- 兽医职业技能鉴定试题及答案
- 交流技巧提升育婴师试题及答案
- 2025办公室租赁简要合同
- 深入理解的计算机二级试题及答案
- 2024年银行从业资格考试模拟提升试题及答案
- 花果山云雾茶整合营销传播策划方案
- 《静脉采血》课件
- 老年病老年综合征及老年综合评估培训课件
- 2023年中考语文二轮复习:书法鉴赏 真题练习题汇编(含答案解析)
- 白熊效应(修订版)
- 国家中小学智慧教育平台培训专题讲座
- 兰州交通大学《C语言程序设计》2017-2018学年期末试卷
- 电缆信息价换算表(适合深圳)
- 《组织部新来了年轻人》优质课件
- BZ悬臂吊说明书
- 监理工作阶段性报告(共页)
评论
0/150
提交评论