泛型列表集合_第1页
泛型列表集合_第2页
泛型列表集合_第3页
泛型列表集合_第4页
泛型列表集合_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、泛型列表集合,第一章,就业技能结构图,回顾数组和集合的概念 如何使用数组Array访问数据 如何使用集合ArrayList访问数据 如何使用强类型集合CollectionBase 泛型集合List的使用 定义泛型集合List 使用泛型集合List对集合进行添加、删除、遍历等操作 使用泛型集合List对集合进行排序操作,本章目标,回顾数组和集合的概念!,数组的局限,string Students = new string3 张三, 李四, 王五;,如果每个班级的人数不固定,班级中来了一个新的学员,班级人员的数组,调整大小困难,增加元素困难,能否动态的维护一个集合?,重新定义数组,相同类型和名称变

2、量的集合,ArrayList是一个可动态维护长度的集合,可维护动态长度的集合,新增元素,可删除元素,可访问单个元素,object,object,object,object,0,1,2,3,索引(下标),object,4,0,1,2,3,ArrayList,自动调整索引,通过索引访问,ArrayList的初始化,using System.Collections; ArrayList Students = new ArrayList(); ArrayList Teachers = new ArrayList(5),可以指定长度,引入命名空间,实例化一个对象,常见错误,未引入命名空间,定义时未实例化

3、,引入System.Collections命名空间 实例化ArrayList对象,ArrayList添加元素,int Add(Object value) /添加一个对象到集合的末尾,ArrayList students = new ArrayList(); Student scofield = new Student(Scofield, Genders.Male, 28, 越狱狱); students.Add(scofield);,创建学员对象,添加学员,连续添加三个学员对象 并获取集合元素的数目,返回索引,ArrayList.Count获取元素数目,建立班级学员的集合,演示示例:ArrayL

4、ist基本方法,访问ArrayList元素,(类型) ArrayListindex /按指定索引(下标)取得对象,Student stu1 = (Student)students0; stu1.SayHi(); ,按索引取值,转换为学员对象,ArrayList第一个对象的索引是0,需要类型转换,删除ArrayList的元素,ArrayList.Remove(对象名) /删除指定对象名的对象 ArrayList.RemoveAt(index) /删除指定索引的对象 ArrayList.Clear() /清除集合内的所有元素,students.RemoveAt(0); students.Remov

5、e(zhang); Student leave = (Student)students0; leave.SayHi();,通过索引删除对象,通过指定对象删除,只剩一个对象,剩余的元素会自动调整索引,取得删除后的第一个对象,ArrayList 的遍历,/遍历 foreach (Object stuo in students) Student stuForeach = (Student)stuo; Console.WriteLine(stuForeach.Name); ,通过对象遍历,打印对象的Name属性,Scofield 张靓靓 周杰杰,可以使用和数组类似的方式,for (int i = 0;

6、 i students.Count; i+) Student stuFor = (Student)studentsi; 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“,public stru

7、ct Student public Student(string name, int age) Name = name; Age = age; public string Name; public int Age; ,Student stu1 = new Student(张三,20); Student stu2 = new Student(李四, 20); Student stu3 = new Student(王五, 20); ArrayList students = new ArrayList(); students.Add(stu1); students.Add(stu2); studen

8、ts.Add(stu3);,常见错误2,static void Main(string args) /初始化代码将对象加入ArrayList集合 foreach (Student stu in students) Student myStudent = (Student)stu; myStudent.Age = 60; foreach (Student stu in students) Console.WriteLine(stu.Age); ,遍历显示年龄结果是多少?,结构是值类型,定义一个学员结构,使用ArrayList存储学员,遍历修改年龄,演示示例:ArrayList遍历修改结构成员,类

9、型安全1,MySchool中添加一个Teacher类,Teacher jacky = new Teacher(成龙龙, 4); jacky.SayHi(); students.Add(jacky);,能否加入一个Teacher对象?,foreach (Object stuo in students) Student stu = (Student)stuo; Console.WriteLine(stu.Name); ,遍历这个集合是否有问题?,演示示例:ArrayList类型安全,类型安全2,Student集合,Scofield,张靓靓,周杰杰,成龙龙,添加对象,遍历集合,对象存储不易控制,类型

10、转换容易出错,Teacher对象,运行错误,自定义集合 public class StudentCollection : CollectionBase 利用List存储班级集合: public int Add(Student student)return this.List.Add(student);,强类型集合CollectionBase的使用,students.Add(scofield); students.Add(jacky);,将Student对象加入班级,将Teacher对象加入班级,编译出错,foreach (Student stu in students) Console.Wri

11、teLine(stu.Name); ,不需类型转换,遍历StudentCollection,演示示例:强类型集合CollectionBase,只能保存Student对象,强类型集合CollectionBase的优缺点,用途:CollectionBase的用途是创建集合类 优点:CollectionBase集合可以约束集合内的元素类型 缺点:对于每个实体类都需要编写大量的集合代码,StudentCollection,Student对象,Teacher对象,允许添加,不允许添加,Student对象,无需转换类型,引入命名空间:System.Collections.Generic List stud

12、ents = new List(); 利用List存储班级集合,泛型集合List的使用,students.Add(scofield); students.Add(jacky);,将Student对象加入班级,将Teacher对象加入班级,编译出错,foreach (Student stu in students) Console.WriteLine(stu.Name); ,不需类型转换,遍历List集合,演示示例:泛型集合List的使用,只能保存Student对象,什么是泛型集合,泛型最常见的用途是创建集合类 泛型集合可以约束集合内的元素类型 典型泛型集合List,Dictionary 、表示

13、该泛型集合中的元素类型,List,Student对象,Teacher对象,允许添加,不允许添加,Student对象,无需转换类型,使用泛型集合List,Student stu1 = students2; stu1.SayHi(); Students.RemoveAt(0); /List 方式 foreach (Student stu in students) Console.WriteLine(stu.Name); ,List的访问方式与ArrayList相同,使用索引访问,无需类型转换,利用索引删除,遍历时不需要类型转换,List 与 ArrayList,访问 List 与 ArrayLis

14、t 的对比,List 与 CollectionBase,访问 List 与 CollectionBase的对比,各种对象管理方式的对比,各种对象管理方式的对比,集合的排序!,普通集合的排序,ArrayList的Sort()方法对string集合排序,我们目前为止学习了那些排序方法?,演示示例:冒泡排序,string zhang = zhang; string li = li; string wang = wang; ArrayList list = new ArrayList(); list.Add(zhang); list.Add(li); list.Add(wang); /打印 list.

15、Sort(); /打印,在排序前后分别打印集合,默认按姓名首字母升序排列,演示示例:ArrayList对string集合排序,自定义对象的排序,学员集合ArrayList会按照什么方式排序呢?,按姓名的首字母?,按年龄大小?,ArrayList students = new ArrayList (); Student scofield = new Student(Scofield, Genders.Male, 28, 越狱狱); students.add(scofield); /添加几个学员对象 students.Sort();,运行时报错,程序不知道我们要根据什么排序,IComparable

16、是一个接口,IComparable接口,public interface IComparable int CompareTo (Object obj ) ; ,当前实例与另一个对象比较大小,接口的定义,比较方法,if (this.Age other.Age) return 1;,如果希望按年龄排序,CompareTo的写法,实现这个接口的对象,可以进行比较,实现这个接口的类,意味着有可排序的功能,实现IComparable接口,public class Student:Person,IComparable public int CompareTo(object obj) if (!(obj i

17、s Student) throw new Exception(只能与Student 对象比较); Student other = obj as Student; return this.Name.CompareTo(other.Name); ,一个未实现的CompareTo(object obj),实现CompareTo就可以排序,IComparable是一个接口,学生类实现IComparable,标识实现该接口,按姓名升序,实现CompareTo,演示示例 实现IComparable接口排序,泛型集合的排序,泛型集合List的Sort()方法对string集合排序,string zhang

18、= zhang; string li = li; string wang = wang; List list = new List(); list.Add(zhang); list.Add(li); list.Add(wang); /打印 list.Sort(); /打印,在排序前后分别打印集合,默认按姓名首字母升序排列,演示示例 List对string集合排序,自定义对象的排序,学员集合List会按照什么方式排序呢?,按姓名的首字母?,按年龄大小?,List students = new List(); Student scofield = new Student(Scofield, Gen

19、ders.Male, 28, 越狱狱); students.add(scofield); /添加几个学员对象 students.Sort();,运行时报错,程序不知道我们要根据什么排序,IComparable是一个接口,什么是泛型接口,public int CompareTo(object obj) Student other = obj as Student; ,这里需要做一步类型转换,这里需要做一步类型转换,泛型集合在使用时无需类型转换 IComparable接口有泛型版本吗?,IComparable 泛型接口,public interface IComparable,IComparable是IComparable接口的泛型版本,class Student:IComparable public int CompareTo(Student other) return other.Name.CompareTo(this.Name); ,这里约束只能是Student,无需类型转换,实现IComparable,省去了对 Object 的转换,定义更严格,演示示例 实现IComparable泛型接口排序,程序中指定排序方式,实现IComparable可以指定一个类的默认排序,在程序运行中能否指定排序方式呢?,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论