如何使用泛型与泛型集合
时间:2025-05-11
时间:2025-05-11
泛型 集合
如何使用集合和泛型集合
泛型 集合
数组的局限string[] Students = new string[3] {"张三 "李四 "王五 张三", 李四", 王五"}; 张三 李四 王五 班级人员的数组 相同类型和名称 变量的集合
如果每个班级的人数不固定 重新定义数组 班级中来了一个新的学员
调整大小困难
增加元素困难
能否动态的维护一个集合? 能否动态的维护一个集合?
泛型 集合
可维护动态长度的集合ArrayList是一个可动态维护长度的集合 是一个可动态维护长度的集合自动调整 索引 新增元素 ArrayList
0 1 0 2 1 3 2 4 3通过索引 访问 索引(下标 索引 下标) 下标
object object object object object
可删除元素
可访问单个元素
泛型 集合
ArrayList的初始化 的初始化引入System.Collections命名空间 命名空间 引入 实例化ArrayList对象 实例化 对象using System.Collections; 引入命名空间 //… 实例化一个对象 ArrayList Students = new ArrayList(); ArrayList Teachers = new ArrayList(5); 可以指定长度
未引入命名空间 常见错误 定义时未实例化
泛型 集合
ArrayList添加元素 添加元素int Add(Object value) //添加一个对象到集合的末尾 添加一个对象到集合的末尾
建立班级学员的集合
返回索引
ArrayList students = new ArrayList(); Student scofield = new Student("Scofield", Genders.Male, 28, "越狱狱 越狱狱"); 越狱狱 //… 创建学员对象 添加学员 students.Add(scofield); 连续添加三个学员对象 并获取集合元素的数目 ArrayList.Count获 获 取元素数目
演示示例1 演示示例1:MySchool
泛型 集合
访问ArrayList元素 元素 访问(类型 ArrayList[index] //按指定索引(下标)取得对象 类型) 按指定索引( 类型 按指定索引 下标) 需要类型转换 Student stu1 = (Student)students[0]; stu1.SayHi(); … 转换为学员对象 按索引取值
ArrayList第一个对 第一个对 象的索引是0 象的索引是
泛型 集合
删除ArrayList的元素 的元素 删除ArrayList.Remove(对象名 //删除指定对象名的对象 对象名) 删除指定对象名的对象 对象名 ArrayList.RemoveAt(index) //删除指定索引的对象 删除指定索引的对象 ArrayList.Clear() //清除集合内的所有元素 清除集合内的所有元素
students.RemoveAt(0); students.Remove(zhang);
通过索引删除对象 通过指定对象删除 取得删除后的第一个对象
Student leave = (Student)students[0]; leave.SayHi(); 只剩一个对象 剩余的元素会自动调整索引
泛型 集合
ArrayList 的遍历可以使用和数组类似的方式for (int i = 0; i < students.Count; i++) { Student stuFor = (Student)students[i]; Console.WriteLine(http://www.77cn.com.cn); } 输出结果
Scofield 张靓靓 周杰杰
foreach 方式通过对象遍历 //遍历 遍历 foreach (Object stuo in students) { 类型转换 Student stuForeach = (Student)stuo; Console.WriteLine(http://www.77cn.com.cn); 打印对象的Name属性 打印对象的 属性 }
演示示例2 演示示例2
:MySchool
泛型 集合
为什么使用HashTable 为什么使用ArrayList通过索引获取对象 通过索引获取对象Student stu1 = (Student)Students[0];
通过关键字获取对象Students["周杰杰 周杰杰"].SayHi(); 周杰杰
能否像索引器那样通过关键字获取该对象呢? 能否像索引器那样通过关键字获取该对象呢?动态可维护长度 C#提供一种集合 提供一种集合 可通过关键字检索 HashTable
泛型 集合
什么是HashTable 什么是ArrayList 每个元素对应一个索引 HashTable 通常称为哈希表 根据键( 根据键(Key)可以查找到相应的值(Value) )可以查找到相应的值( )ArrayListobject object object object object
HashTable键 Key Key 索引 键和值一一对应 Key Key Key Value Value Value Value Value 值
0 1 2 3 …
泛型 集合
使用哈希表给哈希表添加元素students.Add(http://www.77cn.com.cn , scofield); Key Value 添加元素
获取哈希表的元素… Student stu2 = (Student)students["周杰杰 周杰杰"]; 周杰杰 stu2.SayHi(); 通过key获取元素 通过 获取元素 需要类型转换 …
删除哈希表的元素students.Remove("周杰杰 周杰杰"); 周杰杰 … 通过key删除元素 删除元素 通过
演示示例5 演示示例5:MySchool
泛型 集合
哈希表的遍历如何遍历一个哈希表? 如何遍历一个哈希表? 哈希表不能遍历整个对象, 不能遍历整个对象,而 是遍历Values 是遍历
foreach (Object stuo in students.Values) { Student stu = (Student)stuo; Console.WriteLine(http://www.77cn.com.cn); } foreach (string name in students.Keys) { Console.WriteLine(name); } 可以遍历Keys 可以遍历
Key Key Key Key Key
Value Value Value Value Value
Values
泛型 集合
类型安全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(http://www.77cn.com.cn); } 遍历这个集合是否 有问题? 有问题?
泛型 集合
类型安全2 类型安全对象存储不 易控制 Student集合 集合 Teacher对象 对象 成龙龙 Scofield 张靓靓 周杰杰 添加对象 类型转换 容易出错 遍 …… 此处隐藏:1729字,全部文档内容请下载后查看。喜欢就下载吧 ……