C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型

上传人:E**** 文档编号:89542497 上传时间:2019-05-27 格式:PPTX 页数:30 大小:629.07KB
返回 下载 相关 举报
C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型_第1页
第1页 / 共30页
C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型_第2页
第2页 / 共30页
C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型_第3页
第3页 / 共30页
C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型_第4页
第4页 / 共30页
C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型》由会员分享,可在线阅读,更多相关《C#编程技术基础 教学课件 ppt 作者 武汉厚溥教育科技有限公司 10_第十章-集合和泛型(30页珍藏版)》请在金锄头文库上搜索。

1、第四章,集合和泛型,委托包含对方法的引用,通过委托可以调用某个方法 匿名方法只是少了方法名,编译器会根据匿名方法自动添加相应的静态或实例方法 C#中的事件允许一个对象将消息通知其它的对象 事件参数类需继承自EventArgs类,回顾,使用System.Array操作数组 使用System.ArrayList对象 使用System.Hashtable对象 理解泛型集合类List对象 掌握Dictionary,本章目标,System.Array简介,System.Array,Array是抽象的基类,提供 CreateInstance 方法来创建数组,Array obj = Array.Create

2、Instance(typeof(string),10);,Array str = Array.CreateInstance( typeof( string ) , 5 , 3);,System.Array 的实例属性和方法,System.Array 的静态方法,示例,Array arr = Array.CreateInstance(typeof(string),5); arr.SetValue(“金庸“,0); arr.SetValue(“古龙“, 1); arr.SetValue(“黄易“, 2); arr.SetValue(“梁羽生“, 3); arr.SetValue(“诸葛青云“, 4

3、); Console.WriteLine(“数组元素总个数:“ + arr.Length); Console.WriteLine(“n数组元素是:“); for (int i = 0; i arr.Length; i+) Console.WriteLine(“第0个元素是:1“,i+1,arr.GetValue(i); Array.Sort(arr); Console.WriteLine(“n排序后数组为:“); for (int i = 0; i arr.Length; i+) Console.WriteLine(“第0个元素是:1“, i + 1, arr.GetValue(i); ,数组

4、的局限性,string Students = new string3 “张三“, “李四“, “王五“;,如果每个班级的人数不固定,班级中来了一个新的学员,班级人员的数组,调整大小困难,增加元素困难,能否动态的维护一个集合?,重新定义数组,相同类型和名称变量的集合,可动态维护长度的集合,ArrayList是一个可动态维护长度的集合,新增元素,可删除元素,可访问单个元素,object,object,object,object,0,1,2,3,索引(下标),object,4,0,1,2,3,ArrayList,自动调整索引,通过索引访问,ArrayList的使用,using System.Coll

5、ections; ArrayList Students = new ArrayList(); ArrayList Teachers = new ArrayList(5),可以指定长度,引入命名空间,实例化一个对象,常见错误,未引入命名空间,定义时未实例化,引入System.Collections命名空间 实例化ArrayList对象,ArrayList添加元素,int Add(Object value) /添加一个对象到集合的末尾,ArrayList students = new ArrayList(); Student scofield = new Student(“Scofield“, G

6、enders.Male, 28, “越狱狱“); students.Add(scofield);,创建学员对象,添加学员,连续添加三个学员对象 并获取集合元素的数目,返回索引,ArrayList.Count获取元素数目,建立班级学员的集合,访问ArrayList元素,(类型) ArrayListindex /按指定索引(下标)取得对象,Student stu1 = (Student)students0; stu1.SayHi(); ,按索引取值,转换为学员对象,ArrayList第一个对象的索引是0,需要类型转换,删除ArrayList的元素,ArrayList.Remove(对象名) /删除

7、指定对象名的对象 ArrayList.RemoveAt(index) /删除指定索引的对象 ArrayList.Clear() /清除集合内的所有元素,students.RemoveAt(0); students.Remove(zhang); Student leave = (Student)students0; leave.SayHi();,通过索引删除对象,通过指定对象删除,只剩一个对象,剩余的元素会自动调整索引,取得删除后的第一个对象,ArrayList 的遍历,/遍历 foreach (Object stuo in students) Student stuForeach = (Stu

8、dent)stuo; Console.WriteLine(stuForeach.Name); ,通过对象遍历,打印对象的Name属性,Scofield 张靓靓 周杰杰,可以使用和数组类似的方式,for (int i = 0; i students.Count; i+) Student stuFor = (Student)studentsi; Console.WriteLine(stuFor.Name); ,foreach 方式,输出结果,类型转换,常见错误1,/ students.Add(scofield); students.Add(zhang); students.Add(jay); st

9、udents.RemoveAt(0); students.RemoveAt(1); students.RemoveAt(2);,运行这段代码会发生错误?,索引会自动调整删除两个元素后,不再有索引“2“,常见错误2,Student scofield = new Student(“Scofield“, Genders.Male, 28, “越狱狱“); Student stu2 = new Student(“Scofield“, Genders.Male, 28, “越狱狱“); /打印集合数目 students.Remove(stu2); /打印集合数目 ,如果Remove(stu2),能否删除

10、scofield对象?,定义一个对象与前面的值相同,两次的结果都是3,没有删除,为什么? 在多态章节中我们将试图改变这一现象,什么是HashTable,ArrayList 每个元素对应一个索引 HashTable 通常称为哈希表 根据键(Key)可以查找到相应的值 (Value),object,object,object,object,object,0,1,2,3,ArrayList,索引,Key,Value,Key,Value,Key,Value,Key,Value,Key,Value,HashTable,值,键,键和值一一对应,Hashtable类,Hashtable 类,将人名引用为 H

11、ash(或键)并将电话号码引用为值,Hashtable objFriendDetails = new Hashtable();,修改某键对应的值:哈希表名键 = 新值,使用哈希表,students.Add(scofield.Name , scofield);,添加元素,Key,Value, Student stu2 = (Student)students“周杰杰“; stu2.SayHi(); ,通过key获取元素,students.Remove(“周杰杰“); ,通过key删除元素,给哈希表添加元素,获取哈希表的元素,删除哈希表的元素,需要类型转换,遍历哈希表,foreach (Object

12、 stuo in students.Values) Student stu = (Student)stuo; Console.WriteLine(stu.Name); ,如何遍历一个哈希表?,Key,Value,Key,Value,Key,Value,Key,Value,Key,Value,Values,不能遍历整个对象,而是遍历Values,foreach (string name in students.Keys) Console.WriteLine(name); ,可以遍历Keys,泛型集合,类型安全使用泛型集合编译器会在编译期间检查要放入集合的对象的数据类型,如果发现不是某种特定的类型

13、就会报错 提高性能存取数据时不会发生类型转换,特别是存取值类型时不会发生装箱和拆箱操作,泛型集合就是明确指定了要放入集合的对象是何种类型的集合,System.Collections.Generic名称空间,List的使用,引入命名空间:System.Collections.Generic List students = new List(); 利用List存储班级集合,students.Add(scofield); students.Add(jacky);,将Student对象加入班级,将Teacher对象加入班级,编译出错,foreach (Student stu in students)

14、Console.WriteLine(stu.Name); ,不需类型转换,遍历List集合,只能保存Student对象,示例,List lststu = new List(); Student stu1 = new Student(“张微“,1); Student stu2 = new Student(“叶子“, 2); Student stu3 = new Student(“姚岚“, 3); Student stu4 = new Student(“刘琴“, 4); lststu.Add(stu1); lststu.Add(stu2); lststu.Add(stu3); lststu.Add

15、(stu4); /lststu.Add(“abcd“); 该行代码编译通不过 foreach (Student stu in lststu) Console.WriteLine(stu); ,List类的ForEach( )方法,foreach (Student stu in lststu) Console.WriteLine(stu); ,lststu.ForEach( delegate(Student s) Console.WriteLine(s); );,FoEach( )方法可以使用委托对集合的每一个成员进行操作,List类的FindAll( )方法,FindAll( )方法检索与指定

16、谓词所定义的条件相匹配的所有元素,List ls = lststu.FindAll( delegate(Student s) if(s.Id3) return true; else return false; ); Console.WriteLine(“学号小于3的学生信息如下:“); ls.ForEach(delegate(Student s) Console.WriteLine(s); );,List 与 ArrayList,是否有哈希表那样存储Key和Value形式的泛型集合呢?,访问 List 与 ArrayList 的对比,Dictionary简介,Dictionary具有List相同的特性 约束集合中元素类型 编译时检查类型约束 无需装箱拆箱操作 与哈希表类似存储Key和Value的集

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号