资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
使用集合组织相关数据,第六章,回顾与作业点评,什么是封装?如何实现封装? 类的公有和私有成员在类图中如何表现?,class Test static void Main(string args) Student stus = new Student2new Student(),new Student(); stus0.Age = 10; stus0.Name = “张靓“; stus1.Age = 19; stus1.Name = “小新“; int num = 0; Test.ChangeAge(stus,num); public static void ChangeAge(Student stu, int num) for (int i = 0; i stu.Length; i+) if (stui.Age 15) stui.Age = 15; num+; ,说出调用方法后,num以及学生的姓名和年龄,num:0 张靓:15 小新:19,预习检查,ArrayList中如何添加数据? 定义泛型集合时的特殊语法符号?,本章任务,实现员工信息管理 实现员工考勤管理,理解集合的概念 熟练使用集合访问数据 理解泛型的概念 熟练使用各种泛型集合,本章目标,数组的局限性,SE engineers = new SE3; engineers0 = new SE(); engineers1 = new SE(); ,如果每个部门的人数不固定,部门中来了一个新同事,调整大小困难,增加元素困难,能否动态的维护一个集合?,重新定义数组,3个工程师对象组成的集合,数组长度定义很大,ArrayList是一个可动态维护长度的集合,可维护动态长度的集合,新增元素,可删除元素,可访问单个元素,object,object,object,object,0,1,2,3,索引(下标),object,4,0,1,2,3,ArrayList,自动调整索引,通过索引访问,ArrayList的初始化,using System.Collections; ArrayList engineers = new ArrayList(); ArrayList engineers = new ArrayList(5),可以指定长度,引入命名空间,实例化一个对象,常见错误,未引入命名空间,定义时未实例化,引入System.Collections命名空间 实例化ArrayList对象,ArrayList添加元素,int Add(Object value) /添加一个对象到集合的末尾,ArrayList engineers = new ArrayList(); SE jack = new SE(); jack.Name = “王小毛“; engineers.Add(jack);,创建工程师对象,添加对象到集合,连续添加三个工程师对象 并获取集合元素的数目,返回索引,engineers.Count获取元素数目,建立部门工程师集合,访问ArrayList元素,(类型) ArrayList index /按指定索引(下标)取得对象,SE engineer = (SE) engineers0; MessageBox.Show(engineer.SayHi(); ,按索引取值,转换为工程师对象,需要类型转换,获取集合元素,并执行问好,ArrayList 的遍历,foreach (Object obj in engineers) SE seForeach = (SE)obj; Console.WriteLine(seForeach.Name); ,通过对象遍历,王小毛 周新雨 张烨,可以使用和数组类似的方式,for (int i = 0; i engineers.Count; i+) SE seFor = (SE)engineersi; Console.WriteLine(seFor.Name); ,foreach 方式,类型转换,删除ArrayList的元素,ArrayList.Remove(对象名) /删除指定对象名的对象 ArrayList.RemoveAt(index) /删除指定索引的对象 ArrayList.Clear() /清除集合内的所有元素,engineers.RemoveAt(0); engineers.Remove(ema); MessageBox.Show(string.Format(“部门共包括 0 个工程师。“, engineers.Count.ToString(); SE leave = (SE)engineers0; MessageBox.Show(leave.SayHi();,通过索引删除元素,剩余的元素会自动调整索引,通过指定对象删除元素,常见错误2-1,/ /添加元素 engineers.Add(jack); engineers.Add(joe); engineers.Add(ema); /删除元素 engineers.RemoveAt(0); engineers.RemoveAt(1); engineers.RemoveAt(2);,运行这段代码会发生错误?,索引会自动调整,删除两个元素后,不再有索引“2”,常见错误2-2,/定义三个SE对象(省略) SE se2 = new SE(); se2.Name = “王小毛“; se2.Age = 26; engineers.Add(se2); engineers.Remove(se2); /打印集合数目 ,定义一个对象与前面定义的jack对象属性值相同,Remove(se2),能否删除 jack对象?,小结,学生类Student已定义,属性为:Name、Age 使用ArrayList存储学生集合 添加两个学生(周杰伦,22;杨伊,21) 使用for和foreach遍历学生信息,参考答案,ArrayList通过索引获取对象,为什么使用哈希表,是否能够通过关键字获取该对象呢?,动态可维护长度,可通过关键字检索,C#提供另一种集合,集合:Hashtable,SE engineer = (SE) engineers0;,ArrayList中元素频繁变化,跟踪元素下标很困难,什么是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 engineers = new Hashtable(); engineers.Add(jack.ID, jack);,添加元素,Key,Value,SE se2 = (SE) engineers“000“; se2.SayHi();,通过key获取元素,sengineers.Remove(“000“); ,通过key删除元素,给哈希表添加元素,获取哈希表的元素,删除哈希表的元素,需要类型转换,哈希表的遍历,foreach(Object obj in engineers.Values) SE se = (SE)obj; Console.WriteLine(se.Name); ,如何遍历一个哈希表?,Key,Value,Key,Value,Key,Value,Key,Value,Key,Value,Values,不能遍历整个对象,而是遍历Values,foreach (Object obj in engineers.Keys) Console.WriteLine(string)obj); ,可以遍历Keys,小结,删除一个ArrayList元素有几种方法? Hashtable和ArrayList的主要区别是什么?,类型安全2-1, PM pm = new PM(); pm.Name = “盖茨“; pm.Id = “8230“; engineers.Add(jack); engineers.Add(joe); engineers.Add(ema); engineers.Add(pm); /添加一个项目经理对象,能否加入一个PM对象?,foreach (Object obj in engineers) SE engineer = (SE)obj; MessageBox.Show(engineer.SayHi(); ,遍历这个集合是否有问题?,考虑出现的问题,类型安全2-2,SE集合,王小毛,周新雨,张烨,盖茨,添加对象,遍历集合,转换为SE对象,对象存储不易控制,类型转换容易出错!,PM对象,运行错误,使用List加强类型安全,使用List, List engineers = new List(); engineers.Add(jack); engineers.Add(joe); engineers.Add(ema); engineers.Add(pm); /添加一个项目经理对象 ,将SE对象加入工程师集合,编译出错,泛型集合,什么是泛型集合,泛型最常见的用途是创建集合类 泛型集合可以约束集合内的元素类型 典型泛型集合List,Dictionary 、表示该泛型集合中的元素类型,List,SE对象,PM对象,允许添加,不允许添加,SE对象,无需转换类型,使用List泛型集合,命名空间:System.Collections.Generic 创建List泛型集合 遍历,List engineers = new List();,foreach (SE se in engineers) MessageBox.Show(se.SayHi(); ,只能保存SE对象,无需类型转换,VS 2010 自动引入,List的访问方式与ArrayList类似,List 与 ArrayList,访问 List 与 ArrayList 的对比 是否有哈希表那样存储Key和Value形式的泛型集合呢?,Dictionary概述,Dictionary通常称为字典 约束集合中元素类型 编译时检查类型约束 无需装箱拆箱操作 与哈希表操作类似,Dictionary的使用,engineers.Add(jack.ID,jack); SE engineer = engineers“000“; engineers.Remove(“000“); ,添加一对Key/Value,通过Key获取元素,通过Key删除元素,/Dictionary 方式 foreach (SE se in engineers.Values) MessageBox.Show(se.SayHi(); ,遍历Values,Dictionary engineers = new Dictionary();,Key存储String类型,Value存储SE类型,利用Dictionary存储工程师列表,Dictionary与哈希表,访问 Dictionary 与 哈希表 的对比,泛型,泛型 操作的数据类型被定义为一个参数 泛型类,如何选中ComboBox中的一项后,获得对应的一个对象,class ComboBoxItem private string _itemText; /显示的文字 public string ItemText get return _itemText; set
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号