您好,欢迎访问三七文档
泛型列表集合第一章就业技能结构图回顾数组和集合的概念如何使用数组Array访问数据如何使用集合ArrayList访问数据如何使用强类型集合CollectionBase泛型集合ListT的使用定义泛型集合ListT使用泛型集合ListT对集合进行添加、删除、遍历等操作使用泛型集合ListT对集合进行排序操作本章目标数组的局限string[]Students=newstring[3]{张三,李四,王五};如果每个班级的人数不固定班级中来了一个新的学员班级人员的数组调整大小困难增加元素困难能否动态的维护一个集合?重新定义数组相同类型和名称变量的集合ArrayList是一个可动态维护长度的集合可维护动态长度的集合新增元素可删除元素可访问单个元素objectobjectobjectobject0123索引(下标)object40123ArrayList自动调整索引通过索引访问ArrayList的初始化usingSystem.Collections;…ArrayListStudents=newArrayList();ArrayListTeachers=newArrayList(5)可以指定长度引入命名空间实例化一个对象常见错误未引入命名空间定义时未实例化引入System.Collections命名空间实例化ArrayList对象ArrayList添加元素intAdd(Objectvalue)//添加一个对象到集合的末尾ArrayListstudents=newArrayList();Studentscofield=newStudent(Scofield,Genders.Male,28,越狱狱);…students.Add(scofield);创建学员对象添加学员连续添加三个学员对象并获取集合元素的数目返回索引ArrayList.Count获取元素数目建立班级学员的集合演示示例:ArrayList基本方法访问ArrayList元素(类型)ArrayList[index]//按指定索引(下标)取得对象Studentstu1=(Student)students[0];stu1.SayHi();…按索引取值转换为学员对象ArrayList第一个对象的索引是0需要类型转换删除ArrayList的元素ArrayList.Remove(对象名)//删除指定对象名的对象ArrayList.RemoveAt(index)//删除指定索引的对象ArrayList.Clear()//清除集合内的所有元素students.RemoveAt(0);students.Remove(zhang);Studentleave=(Student)students[0];leave.SayHi();通过索引删除对象通过指定对象删除只剩一个对象剩余的元素会自动调整索引取得删除后的第一个对象ArrayList的遍历//遍历foreach(Objectstuoinstudents){StudentstuForeach=(Student)stuo;Console.WriteLine(stuForeach.Name);}通过对象遍历打印对象的Name属性Scofield张靓靓周杰杰可以使用和数组类似的方式for(inti=0;istudents.Count;i++){StudentstuFor=(Student)students[i];Console.WriteLine(stuFor.Name);}foreach方式输出结果类型转换常见错误1//…students.Add(scofield);students.Add(zhang);students.Add(jay);students.RemoveAt(0);students.RemoveAt(1);students.RemoveAt(2);运行这段代码会发生错误?索引会自动调整删除两个元素后,不再有索引“2“publicstructStudent{publicStudent(stringname,intage){Name=name;Age=age;}publicstringName;publicintAge;}Studentstu1=newStudent(张三,20);Studentstu2=newStudent(李四,20);Studentstu3=newStudent(王五,20);ArrayListstudents=newArrayList();students.Add(stu1);students.Add(stu2);students.Add(stu3);常见错误2staticvoidMain(string[]args){…//初始化代码将对象加入ArrayList集合foreach(Studentstuinstudents){StudentmyStudent=(Student)stu;myStudent.Age=60;}foreach(Studentstuinstudents){Console.WriteLine(stu.Age);}}遍历显示年龄结果是多少?结构是值类型定义一个学员结构使用ArrayList存储学员遍历修改年龄演示示例:ArrayList遍历修改结构成员类型安全1MySchool中添加一个Teacher类Teacherjacky=newTeacher(成龙龙,4);jacky.SayHi();students.Add(jacky);能否加入一个Teacher对象?foreach(Objectstuoinstudents){Studentstu=(Student)stuo;Console.WriteLine(stu.Name);}遍历这个集合是否有问题?演示示例:ArrayList类型安全类型安全2Student集合Scofield张靓靓周杰杰成龙龙添加对象遍历集合对象存储不易控制类型转换容易出错Teacher对象运行错误自定义集合publicclassStudentCollection:CollectionBase{}利用List存储班级集合:publicintAdd(Studentstudent){returnthis.List.Add(student);}强类型集合CollectionBase的使用students.Add(scofield);…students.Add(jacky);将Student对象加入班级将Teacher对象加入班级编译出错foreach(Studentstuinstudents){Console.WriteLine(stu.Name);}不需类型转换遍历StudentCollection演示示例:强类型集合CollectionBase只能保存Student对象强类型集合CollectionBase的优缺点用途:CollectionBase的用途是创建集合类优点:CollectionBase集合可以约束集合内的元素类型缺点:对于每个实体类都需要编写大量的集合代码StudentCollectionStudent对象Teacher对象允许添加不允许添加Student对象无需转换类型引入命名空间:System.Collections.GenericListStudentstudents=newListStudent();利用ListStudent存储班级集合泛型集合ListT的使用students.Add(scofield);…students.Add(jacky);将Student对象加入班级将Teacher对象加入班级编译出错foreach(Studentstuinstudents){Console.WriteLine(stu.Name);}不需类型转换遍历ListStudent集合演示示例:泛型集合List的使用只能保存Student对象什么是泛型集合泛型最常见的用途是创建集合类泛型集合可以约束集合内的元素类型典型泛型集合ListT,DictionaryK,VT、K,V表示该泛型集合中的元素类型ListStudentStudent对象Teacher对象允许添加不允许添加Student对象无需转换类型使用泛型集合ListTStudentstu1=students[2];stu1.SayHi();Students.RemoveAt(0);//ListStudent方式foreach(Studentstuinstudents){Console.WriteLine(stu.Name);}ListT的访问方式与ArrayList相同使用索引访问,无需类型转换利用索引删除遍历时不需要类型转换ListT与ArrayList通过索引删除元素添加对象方法相同通过索引访问集合的元素相同点需要装箱拆箱无需装箱拆箱可以增加任何类型增加元素时类型严格检查不同点ArrayListListT异同点访问ListT与ArrayList的对比ListT与CollectionBase访问ListT与CollectionBase的对比异同点ListTCollectionBase相同点通过索引访问集合的元素添加对象方法相同通过索引删除元素增加元素时类型严格检查无需装箱拆箱不同点不需要额外编码需要额外编码各种对象管理方式的对比各种对象管理方式的对比名称定义方式可以动态增删可以检查类型无需装箱拆箱无需额外编码对象数组Student[]NYYY动态数组ArrayListYNNY强类型集合CollectionBaseYYYN泛型集合ListTYYYY普通集合的排序ArrayList的Sort()方法对string集合排序我们目前为止学习了那些排序方法?演示示例:冒泡排序stringzhang=zhang;stringli=li;stringwang=wang;ArrayListlist=newArrayList();list.Add(zhang);list.Add(li);list.Add(wang);//…打印list.Sort();//…打印在排序前后分别打印集合默认按姓名首字母升序排列演示示例:ArrayList对string集合排序自定义对象的排序学员集合ArrayList会按照什么方式排序呢?按姓名的首字母?按年龄大小?ArrayListstudents=newArrayList();Studentscofield=newStudent(Scofield,Genders.Male,28,越狱狱);students.add(scofield);…//添加几个学员对象students.Sort();运行时报错程序不知道我们要根据什么排序IComparable是一个接口IComparable接口publicinterfaceIComparable{intCompareTo(Objectobj);}当前实例与另一个对象比较大小此实例大于obj大于0此实例等于obj等于0此实例小于obj小于0含义返回值接口的定义比较方法if(this.Ageother.Age)return-1;if(this.Age==other.Age)return0;if(this.Ageother.Age)return1;如果希望按年龄排序,CompareTo的写法实现这个接口的对象,可以进行比较实现这个接口的类,意味着有可排序的功能实现IComparable接口publicclassStudent:Person,IComparable{publicintCompareTo(objectobj){if(!(objisStudent))thrownewException(只能与Student对象比较);Studentother=objasStudent;returnthis.Name.CompareTo(other.Name);}}一个未实现的CompareTo(objectobj)实现CompareTo就可以排序IComparable是
本文标题:1泛型列表集合
链接地址:https://www.777doc.com/doc-3645736 .html