版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章使用集合组织相关数据预习检查ArrayList中如何添加数据?定义泛型集合时的特殊语法符号是什么?如何遍历一个Hashtable类型的集合对象中的元素?使用泛型集合类需要引入什么命名空间?请使用泛型集合存储5名学生信息(包括编号、姓名、性别、家庭住址),并遍历输出他们每个人的姓名集中测试2/44回顾与作业点评说出调用方法后,num及学生姓名和年龄的值点评作业的提交情况和共性问题staticvoidMain(string[]args){Student[]stus=newStudent[2]{newStudent(),newStudent()};stus[0].Age=10;stus[0].Name="张靓";stus[1].Age=19;stus[1].Name="小新";intnum=0;ChangeAge(stus,num);}staticvoidChangeAge(Student[]stu,intnum){for(inti=0;i<stu.Length;i++){if(stu[i].Age<15){stu[i].Age=15;num++;}}}num:0张靓:15小新:19代码阅读作业点评3/44本章任务实现员工信息管理(新增、查询、删除)实现员工考勤管理(签到、签退)4/44本章目标理解集合的概念会使用集合初始化器熟练使用集合访问数据理解泛型的概念熟练使用各种泛型集合5/44数组的局限性能否建立一个动态的“数组”?//3个工程师对象组成的数组SE[
]engineers=newSE[3];engineers[0]=newSE();engineers[1]=newSE();……如果每个部门的人数不固定部门中来了一个新同事调整大小困难增加元素困难重新定义数组数组长度定义很大问题6/44可维护动态长度的集合ArrayList是一个可动态维护长度的集合新增元素可删除元素可访问单个元素objectobjectobjectobject0123索引(下标)object40123ArrayList自动调整索引通过索引访问7/44ArrayList的初始化引入System.Collections命名空间实例化ArrayList对象usingSystem.Collections;…ArrayListengineers=newArrayList();ArrayListengineers=newArrayList(5)可以指定长度引入命名空间实例化一个对象常见错误未引入命名空间定义时未实例化示例注意实现步骤8/44ArrayList添加元素int
Add(Objectvalue)//添加一个对象到集合的末尾ArrayListengineers=newArrayList();//创建工程师对象SEjack=newSE();jack.Name="王小毛";……//添加对象到集合engineers.Add(jack);//获取集合元素的数目MessageBox.Show(engineers.Count);返回索引语法示例提示演示示例1:向集合添加元素向ArrayList中添加值类型的元素时,会执行装箱处理!9/44集合初始化器C#3.0语言的新特性之一由一系列元素初始化器构成,包围在“{”和“}”之间,并使用逗号进行分隔示例ArrayListengineers=newArrayList(){
newSE(){Name="王小毛",Age=26,Gender=Gender.male,ID="000",Popularity=10},
newSE(){Name="周新雨",Age=22,Gender=Gender.female,ID="111",Popularity=20},
newSE(){Name="张烨",Age=30,Gender=Gender.male,ID="222",Popularity=20}};演示示例2:集合初始化器构造集合10/44访问ArrayList单个元素(类型)ArrayList[index]//按指定索引(下标)取得对象SEengineer=(SE)
engineers[0];MessageBox.Show(engineer.SayHi());…转换为工程师对象需要类型转换语法示例演示示例3:访问集合单个元素11/44ArrayList的遍历使用和数组类似的方式(通过索引)foreach(Objectobj
inengineers){SEseForeach=(SE)obj;Console.WriteLine(seForeach.Name);}王小毛周新雨张烨for(inti=0;i<engineers.Count;i++){SEseFor=(SE)engineers[i];Console.WriteLine(seFor.Name);}foreach方式(通过对象)演示示例4:遍历集合元素12/44删除ArrayList的元素ArrayList.Remove(对象名)//删除指定对象名的对象ArrayList.RemoveAt(index)//删除指定索引的对象ArrayList.Clear()//清除集合内的所有元素engineers.RemoveAt(0);//删除索引为0的元素
engineers.Remove(ema);//删除元素emaMessageBox.Show(string.Format("部门共包括{0}个工程师。",engineers.Count.ToString()));SEleave=(SE)engineers[0];MessageBox.Show(leave.SayHi());语法示例剩余的元素会自动调整索引注意演示示例5:删除集合元素13/44常见错误2-1运行这段代码为何会发生错误?//添加元素engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);//删除元素engineers.RemoveAt(0);engineers.RemoveAt(1);engineers.RemoveAt(2);索引会自动调整,删除两个元素后,不再有索引“2”代码阅读演示示例:常见错误114/44常见错误2-2以下代码能否删除与se2属性相同的jack对象?//定义三个SE对象(省略)SEse2=newSE();
se2.Name="王小毛";se2.Age=26;……engineers.Add(se2);engineers.Remove(se2);…定义对象se2与前面定义的jack对象属性值相同代码阅读演示示例:常见错误215/44小结学生类Student已定义,属性为:Name、Age使用ArrayList存储学生集合添加两个学生(周杰伦,22;杨伊,21)使用for和foreach遍历学生信息现场编程16/44为什么使用HashtableArrayList通过索引获取对象是否能够通过关键字获取该对象呢?动态可维护长度可通过关键字检索C#提供另一种集合集合:HashtableSEengineer=(SE)
engineers[0];ArrayList中元素频繁变化,跟踪元素下标很困难问题17/44什么是HashtableArrayList每个元素对应一个索引Hashtable通常称为哈希表根据键(Key)可以查找到相应的值(Value)objectobjectobjectobjectobject0123…ArrayList索引KeyValueKeyValueKeyValueKeyValueKeyValueHashtable值键键和值一一对应18/44使用Hashtable给Hashtable添加元素Hashtableengineers=newHashtable();
engineers.Add(jack.ID,
jack);KeyValueSEse2=(SE)engineers["000"];se2.SayHi();通过key获取元素engineers.Remove("000");…通过key删除元素获取Hashtable的元素删除Hashtable的元素需要类型转换19/44如何遍历Hashtable?Hashtable的遍历foreach(Objectobjinengineers.Values){SEse=(SE)obj;Console.WriteLine(se.Name);}KeyValueKeyValueKeyValueKeyValueKeyValueValues不能遍历整个对象,而是遍历Valuesforeach(Objectobjinengineers.Keys){Console.WriteLine((string)obj);}可以遍历Keys问题Keysforeach(DictionaryEntryeninengineers){Console.WriteLine((string)obj);Console.WriteLine(((SE)en.value).Name);}可以遍历键/值对演示示例6:Hashtable操作20/44小结删除一个ArrayList元素有几种方法?Hashtable和ArrayList的主要区别是什么?提问21/44类型安全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());}遍历这个集合是否有问题?代码阅读演示示例7:类型安全22/44类型安全2-2发生异常的原因SE集合王小毛周新雨张烨盖茨添加对象遍历集合,转换为SE对象PM对象运行错误分析注意使用集合存储数据时容易出现的问题(1)对象存储不易控制(2)类型转换容易出错!23/44使用List<T>加强类型安全使用List<T>……List<SE>engineers=newList<SE>();//将SE对象加入工程师集合engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);engineers.Add(pm);//添加一个项目经理对象……编译出错泛型集合演示示例8:泛型集合List保证类型安全24/44什么是泛型集合泛型<T>最常见的用途是创建集合类泛型集合可以约束集合内的元素类型典型泛型集合List<T>、Dictionary<K,V><T>、<K,V>表示该泛型集合中的元素类型List<SE>SE对象PM对象允许添加不允许添加SE对象无需转换类型25/44使用List<T>泛型集合命名空间:System.Collections.Generic创建List<T>泛型集合遍历List<SE>engineers=newList<SE>();foreach(SEseinengineers){MessageBox.Show(se.SayHi());}只能保存SE对象无需类型转换使用步骤技巧演示示例9:泛型集合List<T>操作List<T>的访问方式与ArrayList类似,可对比学习!26/44List<T>与ArrayList访问List<T>与ArrayList的对比是否有Hashtable那样存储Key和Value形式的泛型集合呢?问题异同点
List<T>
ArrayList不同点增加元素时类型严格检查可以增加任何类型添加和读取值类型元素时,无需装箱拆箱添加和读取值类型元素时,需要装箱拆箱相同点通过索引访问集合的元素添加对象方法相同通过索引删除元素27/44Dictionary<K,V>概述Dictionary<K,V>通常称为字典<K,V>约束集合中元素类型编译时检查类型约束无需装箱拆箱操作与Hashtable操作类似28/44Dictionary<K,V>的使用利用Dictionary<K,V>存储工程师列表engineers.Add(jack.ID,jack);…SEengineer=engineers["000"];…engineers.Remove("000");…添加一对Key/Value通过Key获取元素通过Key删除元素//Dictionary<string,SE>方式foreach(SEseinengineers.Values){MessageBox.Show(se.SayHi());}遍历ValuesDictionary<string,SE>engineers
=newDictionary<string,SE>();Key存储String类型Value存储SE类型演示示例10:泛型集合Dictionary操作29/44Dictionary<K,V>与Hashtable访问Dictionary<K,V>与Hashtable的对比异同点
Dictionary<K,V>Hashtable不同点增加元素时类型严格检查可以增加任何类型无需装箱拆箱需要装箱拆箱相同点通过Key获取Value添加对象方法相同遍历方法相同30/44泛型泛型操作的数据类型被定义为一个参数泛型类如何选中ComboBox中的一项后,获得对应的一个对象问题语法publicclass类名<T>{//……}T指类型参数,代表具体的数据类型,可以是类类型,也可以是基本数据类型演示示例11:泛型类31/44泛型的重要性泛型的重要性实现代码重用,未来的主流技术1性能高,避免繁琐的装箱拆箱2提供了更好的类型安全性3
CLR支持泛型432/44学员操作—实现考勤信息管理2-1需求说明实现员工信息和考勤管理系统实现新增员工(员工ID唯一)使用DataGridView控件展示员工列表指导讲解需求说明33/44学员操作—实现考勤信息管理2-2实现思路实现新增功能实现展示员工列表功能确保员工信息的唯一性在添加信息时遍历员工列表。如果有员工ID和新增员工的ID相同,则提示不可添加使用DataGridView控件展示集合信息this.dgvProgrammer.DataSource=newBindingList<SE>(list);指导提示完成时间:30分钟34/44学员操作—员工信息查询和删除需求说明实现根据员工工号进行模糊查询实现删除员工信息练习完成时间:20分钟35/44共性问题集中讲解常见问题及解决办法代码规范问题调试技巧共性问题集中讲解36/44学员操作—签到和签退2-1需求说明实现员工签到和签退每天只能签到1次签退前必须已经签到指导讲解需求说明37/44学员操作—签到和签退2-2实现思路编写考勤记录类RecordRecord属性:员工ID、员工姓名、签到时间、签退时间使用Dictionary<string,Reco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年国考统计岗《统计知识》押题卷及答案解析
- 2026 学法练习题及答案分享
- 急诊模拟试题及答案800
- 2026上海徐汇区城市运行管理中心、政务服务中心、大数据中心第二批编外人员招聘笔试备考题库及答案详解
- 2026年景谷傣族彝族自治县网格员招聘笔试模拟试题及答案解析
- 2026横琴粤澳深度合作区人民法院招聘聘用制审判辅助人员16人考试备考试题及答案详解
- 2026济宁汶上中银富登村镇银行招聘考试备考题库及答案详解
- 2026北京顺义赵全营社区卫生服务中心招2人考试备考题库及答案详解
- 2026广东深圳宝安区水田实验学校招聘考试参考题库及答案详解
- 2026宝鸡市凤县中医医院招聘考试参考题库及答案详解
- 2026秋季新学期班干部聘任仪式
- 2026秋新教材统编版九年级上册道德与法治第二课 坚持以人民为中心 教案
- EN IEC 60034-30-1 完整版中文版(EN IEC 60034-30-1-2025)(能效 IE 分级标准原文 + 实操解读)
- 2026年秋季开学小学防震减灾开学第一课
- 2026年继电保护专业岗位考核题库(附答案)
- 山东黄金焦家金矿安全生产管理制度汇编
- 第7课《培养德智体美劳全面发展的社会主义建设者和接班人》课件
- 出租车企业安全隐患排查工作手册
- 中国少儿思维能力培养市场营销模式及发展方向预测研究报告
- 2027届广州中考英语听说考试专项训练
- 2026年江苏省盐城市重点中学小升初英语考试题库试题附答案
评论
0/150
提交评论