c#ArrayList使用集合组织相关数据.ppt

上传人:tia****nde 文档编号:12805318 上传时间:2020-05-25 格式:PPT 页数:40 大小:1.02MB
返回 下载 相关 举报
c#ArrayList使用集合组织相关数据.ppt_第1页
第1页 / 共40页
c#ArrayList使用集合组织相关数据.ppt_第2页
第2页 / 共40页
c#ArrayList使用集合组织相关数据.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
使用集合组织相关数据,第六章,回顾与作业点评,什么是封装?如何实现封装?类的公有和私有成员在类图中如何表现?,classTeststaticvoidMain(stringargs)Studentstus=newStudent2newStudent(),newStudent();stus0.Age=10;stus0.Name=张靓;stus1.Age=19;stus1.Name=小新;intnum=0;Test.ChangeAge(stus,num);publicstaticvoidChangeAge(Studentstu,intnum)for(inti=0;istu.Length;i+)if(stui.Age15)stui.Age=15;num+;,说出调用方法后,num以及学生的姓名和年龄,num:0张靓:15小新:19,预习检查,ArrayList中如何添加数据?定义泛型集合时的特殊语法符号?,本章任务,实现员工信息管理实现员工考勤管理,理解集合的概念熟练使用集合访问数据理解泛型的概念熟练使用各种泛型集合,本章目标,数组的局限性,SEengineers=newSE3;engineers0=newSE();engineers1=newSE();,如果每个部门的人数不固定,部门中来了一个新同事,调整大小困难,增加元素困难,能否动态的维护一个集合?,重新定义数组,3个工程师对象组成的集合,数组长度定义很大,ArrayList是一个可动态维护长度的集合,可维护动态长度的集合,新增元素,可删除元素,可访问单个元素,object,object,object,object,0,1,2,3,索引(下标),object,4,0,1,2,3,ArrayList,自动调整索引,通过索引访问,ArrayList的初始化,usingSystem.Collections;ArrayListengineers=newArrayList();ArrayListengineers=newArrayList(5),可以指定长度,引入命名空间,实例化一个对象,常见错误,未引入命名空间,定义时未实例化,引入System.Collections命名空间实例化ArrayList对象,ArrayList添加元素,intAdd(Objectvalue)/添加一个对象到集合的末尾,ArrayListengineers=newArrayList();SEjack=newSE();jack.Name=王小毛;engineers.Add(jack);,创建工程师对象,添加对象到集合,连续添加三个工程师对象并获取集合元素的数目,返回索引,engineers.Count获取元素数目,建立部门工程师集合,访问ArrayList元素,(类型)ArrayListindex/按指定索引(下标)取得对象,SEengineer=(SE)engineers0;MessageBox.Show(engineer.SayHi();,按索引取值,转换为工程师对象,需要类型转换,获取集合元素,并执行问好,ArrayList的遍历,foreach(Objectobjinengineers)SEseForeach=(SE)obj;Console.WriteLine(seForeach.Name);,通过对象遍历,王小毛周新雨张烨,可以使用和数组类似的方式,for(inti=0;iengineers.Count;i+)SEseFor=(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();SEleave=(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对象(省略)SEse2=newSE();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,SEengineer=(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,值,键,键和值一一对应,使用哈希表,Hashtableengineers=newHashtable();engineers.Add(jack.ID,jack);,添加元素,Key,Value,SEse2=(SE)engineers000;se2.SayHi();,通过key获取元素,sengineers.Remove(000);,通过key删除元素,给哈希表添加元素,获取哈希表的元素,删除哈希表的元素,需要类型转换,哈希表的遍历,foreach(Objectobjinengineers.Values)SEse=(SE)obj;Console.WriteLine(se.Name);,如何遍历一个哈希表?,Key,Value,Key,Value,Key,Value,Key,Value,Key,Value,Values,不能遍历整个对象,而是遍历Values,foreach(Objectobjinengineers.Keys)Console.WriteLine(string)obj);,可以遍历Keys,小结,删除一个ArrayList元素有几种方法?Hashtable和ArrayList的主要区别是什么?,类型安全2-1,PMpm=newPM();pm.Name=盖茨;pm.Id=8230;engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);engineers.Add(pm);/添加一个项目经理对象,能否加入一个PM对象?,foreach(Objectobjinengineers)SEengineer=(SE)obj;MessageBox.Show(engineer.SayHi();,遍历这个集合是否有问题?,考虑出现的问题,类型安全2-2,SE集合,王小毛,周新雨,张烨,盖茨,添加对象,遍历集合,转换为SE对象,对象存储不易控制,类型转换容易出错!,PM对象,运行错误,使用List加强类型安全,使用List,Listengineers=newList();engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);engineers.Add(pm);/添加一个项目经理对象,将SE对象加入工程师集合,编译出错,泛型集合,什么是泛型集合,泛型最常见的用途是创建集合类泛型集合可以约束集合内的元素类型典型泛型集合List,Dictionary、表示该泛型集合中的元素类型,List,SE对象,PM对象,允许添加,不允许添加,SE对象,无需转换类型,使用List泛型集合,命名空间:System.Collections.Generic创建List泛型集合遍历,Listengineers=newList();,foreach(SEseinengineers)MessageBox.Show(se.SayHi();,只能保存SE对象,无需类型转换,VS2010自动引入,List的访问方式与ArrayList类似,List与ArrayList,访问List与ArrayList的对比是否有哈希表那样存储Key和Value形式的泛型集合呢?,Dictionary概述,Dictionary通常称为字典约束集合中元素类型编译时检查类型约束无需装箱拆箱操作与哈希表操作类似,Dictionary的使用,engineers.Add(jack.ID,jack);SEengineer=engineers000;engineers.Remove(000);,添加一对Key/Value,通过Key获取元素,通过Key删除元素,/Dictionary方式foreach(SEseinengineers.Values)MessageBox.Show(se.SayHi();,遍历Values,Dictionaryengineers=newDictionary();,Key存储String类型,Value存储SE类型,利用Dictionary存储工程师列表,Dictionary与哈希表,访问Dictionary与哈希表的对比,泛型,泛型操作的数据类型被定义为一个参数泛型类,如何选中ComboBox中的一项后,获得对应的一个对象,classComboBoxItemprivatestring_itemText;/显示的文字publicstringItemTextgetreturn_itemText;set_itemText=value;privateT_itemValue;/实际的对象publicTItemValuegetreturn_itemValue;set_itemValue=value;,泛型的重要性,泛型的重要性泛型是未来的主流技术之一解决了很多需要繁琐操作的问题提供了更好的类型安全性CLR支持泛型,指导新增员工和显示列表2-1,训练要点:泛型集合List需求说明:实现员工信息和考勤管理系统实现新增员工(员工ID唯一)使用DataGridView控件展示员工列表,指导新增员工和显示列表2-2,实现思路:实现新增功能实现展示员工列表功能难点指导:向集合List中新增对象使用maintanceType标识操作(1:新增、0:修改)验证:工号不能重复使用DataGridView控件展示集合信息,完成时间:30分钟,this.dgvProgrammer.DataSource=newBindingList(list);,练习模糊查询和信息删除,需求说明:实现删除员工信息实现根据员工工号进行模糊查询,完成时间:20分钟,共性问题集中讲解,常见调试问题及解决办法代码规范问题,共性问题集中讲解,指导签到和签退2-1,训练要点:泛型集合Dictionary需求说明:实现员工签到和签退每天只能签到1次签退前必须已经签到,讲解需求说明,指导签到和签退2-2,实现思路:编写考勤记录类Record使用Dictionary保存考勤记录编写签到和签退响应,并给出相应提示,完成时间:30分钟,练习显示考勤记录,需求说明:使用DataGridView控件显示员工考勤记录提示DataGridView显示字典泛型集合数据,完成时间:15分钟,BindingSourcebs=newBindingSource();/创建BindingSource对象bs.DataSource=recordList.Values;/设置DataSource为字典Valuesthis.dgvRecords.DataSource=bs;/设置dgv的DataSource为bs,共性问题集中讲解,常见调试问题及解决办法代码规范问题,共性问题集中讲解,总结,哈希表如何获取一个元素的Value?ArrayList与哈希表存取对象需要什么操作?List中的T表示什么?泛型集合与传统集合获取元素时的区别?,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!