ppt课件05C集合和泛型xm.ppt
《ppt课件05C集合和泛型xm.ppt》由会员分享,可在线阅读,更多相关《ppt课件05C集合和泛型xm.ppt(43页珍藏版)》请在三一文库上搜索。
1、集合和泛型集合和泛型2 2System.Collections 简介简介 2-1 ID工作档案ID工作档案ID工作档案ID工作档案职员 1职员 2职员 3职员 4Employee 对象的集合对象组中元素个数未知,并且随时可能要循环、添加和移除 集合概念集合概念l如果对象可以提供对相关对象的引用,那么它就是一如果对象可以提供对相关对象的引用,那么它就是一个集合个集合 ,它可以遍历集合中的每个数据项;,它可以遍历集合中的每个数据项;l专业的说法是所有实现了专业的说法是所有实现了System.Collections.IEnumerableSystem.Collections.IEnumerable接
2、口的类的对象都接口的类的对象都是集合。是集合。集合优点集合优点l数组数组Array是固定大小的,不能伸缩;而集合却是是固定大小的,不能伸缩;而集合却是可变长的。可变长的。l数组要声明元素的类型,集合类的元素类型却是数组要声明元素的类型,集合类的元素类型却是object。l数组可读可写不能声明只读数组。集合类可以提供数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。方法以只读方式使用集合。集合属性集合属性l修改或者获取修改或者获取ArrayListArrayList的容量的容量l使用使用Capacity属性,通过设置该属性的值可以修改属性,通过设置该属性的值可以
3、修改ArrayList的容量;读取该属性的值可以获取的容量;读取该属性的值可以获取ArrayList的容的容量量l当为当为ArrayList对象添加的数据元素的个数超出初始化时指对象添加的数据元素的个数超出初始化时指定的数据项个数时,定的数据项个数时,ArrayList对象的容量还可以自动增长对象的容量还可以自动增长默认增长后的容量为原来的默认增长后的容量为原来的2倍,即数据项的个数为初始化倍,即数据项的个数为初始化时的时的2倍。倍。l常用集合类型常用集合类型 1.ArrayList类类 2.Stack类类 3.Queue类类 4.Hashtable类类 集合类型集合类型7 7集合类型举例集合
4、类型举例-ArrayList的初始化的初始化using System.Collections;ArrayList Students=new ArrayList();ArrayList Teachers=new ArrayList(5)可以指定长度可以指定长度引入命名空间引入命名空间实例化一个对象实例化一个对象常见错误常见错误未引入命名空间未引入命名空间定义时未实例化定义时未实例化l引入System.Collections命名空间l实例化ArrayList对象8 8集合类型举例集合类型举例-ArrayList添加元素添加元素int Add(Object value)/添加一个对象到集合的末尾添加
5、一个对象到集合的末尾ArrayList students=new ArrayList();Student scofield=new Student(Scofield,Genders.Male,28,越狱越狱);students.Add(scofield);创建学员对象创建学员对象添加学员添加学员连续添加三个学员对象连续添加三个学员对象并获取集合元素的数目并获取集合元素的数目返回索引返回索引ArrayList.Count获获取元素数目取元素数目l建立班级学员的集合9 9集合类型举例集合类型举例-访问访问ArrayList元素元素(类型类型)ArrayListindex /按指定索引(下标)取得对
6、象按指定索引(下标)取得对象Student stu1=(Student)students0;stu1.SayHi();按索引取值按索引取值转换为学员对象转换为学员对象ArrayList第一个对第一个对象的索引是象的索引是0需要类型转换需要类型转换1010集合类型举例集合类型举例-删除删除ArrayList的元的元素素ArrayList.Remove(对象名对象名)/删除指定对象名的对象删除指定对象名的对象ArrayList.RemoveAt(index)/删除指定索引的对象删除指定索引的对象ArrayList.Clear()/清除集合内的所有元素清除集合内的所有元素students.Remov
7、eAt(0);students.Remove(zhang);Student leave=(Student)students0;leave.SayHi();通过索引删除对象通过索引删除对象通过指定对象删除通过指定对象删除只剩一个对象只剩一个对象剩余的元素会自动调整索引剩余的元素会自动调整索引取得删除后的第一个对象取得删除后的第一个对象1111集合类型举例集合类型举例-ArrayList 的遍历的遍历/遍历遍历foreach(Object stuo in students)Student stuForeach=(Student)stuo;Console.WriteLine(stuForeach.N
8、ame);通过对象遍历通过对象遍历打印对象的打印对象的Name属性属性Scofield张靓靓张靓靓周杰杰周杰杰l可以使用和数组类似的方式可以使用和数组类似的方式for(int i=0;i students.Count;i+)Student stuFor=(Student)studentsi;Console.WriteLine(stuFor.Name);foreach 方式方式输出结果输出结果类型转换类型转换其他集合类型使用其他集合类型使用l Stack类:栈,后,后进先出。先出。push方法入方法入栈,pop方法出栈方法出栈lQueue类类:队列,先进先出。:队列,先进先出。enqueue方法
9、入队列,方法入队列,dequeue方法出方法出队列。队列。lHashtable类类:哈希表,名:哈希表,名-值对。哈希表是经过优化的,访问下标值对。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。集合。GetHashCode()方法返回一个方法返回一个int型数据,使用这个键的值生型数据,使用这个键的值生成该成该int型数据。哈希表获取这个值最后返回一个索引,表示带有型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。给定散列的数据项在字典中存储的位置。泛型的定义
10、泛型的定义l所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型,泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。类型安全 l.NET中的许多语言如C#,C+和VB.NET都是强类型语言。作为一个程序员,当你使用这些语言时,总会期望编译器进行类型安全的检查。然而,当谈到.NET 1.0和1.1中的集合时,它们是无助于类型安全的。比如一个ArrayList的例子,它拥有一个对象集合-这允许你把任何类型的对象放于该ArrayList中。让我们看一下下例中的代码。例例.缺乏类型安全的缺
11、乏类型安全的ArrayList lusing System;using System.Collections;namespace TestAppclass TestSTAThreadstatic void Main(string args)ArrayList list=new ArrayList();list.Add(3);list.Add(4);/list.Add(5.0);int total=0;foreach(int val in list)total=total+val;Console.WriteLine(Total is 0,total);l本例中,我们建立了一个ArrayList的
12、实例,并把3和4添加给它。然后循环遍历该ArrayList,从中取出整型值然后把它们相加。这个程序将产生结果“Total is 7”。现在,如果我们注释掉下面这句:list.Add(5.0);程序将产生异常:哪里出错了呢?记住ArrayList拥有一个集合的对象。当你把3加到ArrayList上时,你已把值3装箱了。当你循环该列表时,你是把元素拆箱成int型。然而,当你添加值5.0时,你在装箱一个double型值。在第17行,那个double值被拆箱成一个int型。这就是失败的原因。作为一个习惯于使用语言提供的类型安全作为一个习惯于使用语言提供的类型安全的程序员,希望这样的问题在编译期间浮的程
13、序员,希望这样的问题在编译期间浮出水面,而不是在运行时刻。这正是泛型出水面,而不是在运行时刻。这正是泛型产生的原因。产生的原因。泛型泛型l泛型是泛型是 2.0 版版 C#语言和公共语言运行库语言和公共语言运行库(CLR)中的一个新中的一个新功能。功能。l泛型将类型参数的概念引入泛型将类型参数的概念引入.NET Framework,不致引入运,不致引入运行时强制转换或装箱操作的成本或风险。行时强制转换或装箱操作的成本或风险。(强类型化)(强类型化)l使用泛型类型可以最大限度地重用代码、保护类型的安全以使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。及
14、提高性能。泛型最常见的用途是创建集合类。l.NET 2.0的的System.Collections.Generics 命名空间包含了命名空间包含了泛型集合定义。各种不同的集合泛型集合定义。各种不同的集合/容器类都被容器类都被“参数化参数化”了。为了。为使用它们使用它们,只需简单地指定参数化的类型即可。只需简单地指定参数化的类型即可。l编程时需要引入编程时需要引入System.Collection.Generic名称空间,最名称空间,最为常用的有以下两个为常用的有以下两个:lList T类型对象的集合。使用方法与类型对象的集合。使用方法与ArrayList类似,类似,但它不仅比但它不仅比Arra
15、yList更安全,而且明显地更加快速。更安全,而且明显地更加快速。lDictionary V类型的项与类型的项与K类型的键值相关的集类型的键值相关的集合,可以理解合,可以理解Dictionary 是是 Hashtable的泛型版本的泛型版本。泛型泛型Listl创建创建T T类型对象的泛型集合语法为:类型对象的泛型集合语法为:lList List 泛型对象名泛型对象名=new List();=new List();l添加泛型添加泛型ListList的数据项的数据项lAdd()Add():向列表尾部添加,输入参数为:向列表尾部添加,输入参数为T T类型数据类型数据lAddRangeAddRange
16、)():向列表尾部添加,输入参数为:向列表尾部添加,输入参数为T T类类型对象组型对象组lInsert()Insert():向指定位置添加,输入数据为位置索:向指定位置添加,输入数据为位置索引和要添加的对象(引和要添加的对象(T T类型)类型)例:类型安全的泛型列表例:类型安全的泛型列表lListint aList=new Listint();aList.Add(3);aList.Add(4);/aList.Add(5.0);int total=0;foreach(int val in aList)total=total+val;Console.WriteLine(Total is 0,to
17、tal);l在上例中,我们编写了一个泛型的列表的例子,在尖括号内指定参数类型为int。该代码的执行将产生结果“Total is 7”。现在,如果去掉语句doubleList.Add(5.0)的注释,将得到一个编译错误。编译器指出它不能发送值5.0到方法Add(),因为该方法仅接受int型。不同于前例,这里的代码实现了类型安全。泛型集合举例泛型集合举例 public class Employee:IComparable public int ID;public string name;public string department;public Employee(int iID,string
18、sName,string sDepartment)ID=iID;name=sName;department=sDepartment;public int CompareTo(object obj)if(obj is Employee)Employee anotherEmployee=obj as Employee;return this.ID-anotherEmployee.ID;else return 0;输出结果:ID:1,Name:Liu,Department:DataID:2,Name:Li,Department:NetID:3,Name:Yu,Department:NetID:4,N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ppt 课件 05 集合 xm
