




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 集合 索引器与泛型 集合索引器泛型 集合 集合概述选择集合类集合的创建与操作 集合概述 集合是通过高度结构化的方式存储任意对象的类 与无法动态调整大小的数组相比 集合不仅能随意调整大小 而且对存储或检索存储在其中的对象提供了更高级的方法 NETFramework2 0引入了泛型集合 如对象列表List 和强类型非泛型集合 字符串集合StringCollection 在使用泛型集合或非强类型非泛型集合时 要保证元素的类型是集合所需的类型 System Collections命名空间的ICollection接口定义了所有非泛型集合的大小和操作方法 包括添加 移除与搜索集合元素等 System Collections命名空间还包含了ICollection接口最常用的已实现的集合类 选择集合类 NETFramework的集合类集合类的选择 NETFramework的集合类 1 常用集合 2 位集合包括BitArray和BitVector32 3 专用集合包括StringCollection StringDictionary和NameValueCollection等 集合类的选择 选择集合类时 一般要考虑以下问题 1 是否需要一个序列列表 需要先进先出行为时可使用Queue队列类 在需要后进先出行为时可使用Stack栈类 2 是否需要随机访问集合中的元素 此时不能选择Queue队列类 Stack栈类 LinkedList双向链表类 3 是否需要通过索引访问每个元素 只有ArrayList StringCollection等是从索引为零的元素开始逐个访问集合元素 Hashtable Dictionary通过元素的键 即元素名字 提供对元素的访问 而NameValueCollection类和SortedList泛型类通过其元素的从零开始的索引 或者通过其元素的键提供对元素的访问 4 是否包含一个值 一个键和一个值的集合 还是一个键和多个值的集合 其中 一个值 的集合是一种基于IList列表接口派生的集合 一个键和一个值 的集合是一种基于IDictionary字典接口的集合 一个键和多个值 的集合是NameValueCollection类 集合类的选择 续 5 是否需要用与输入元素方式不同的方式对元素排序 Hashtable按其元素的哈希代码对元素排序 SortedList以及SortedDictionary根据IComparer实现按键对元素的排序 而ArrayList提供Sort排序方法 6 是否需要信息的快速搜索和检索 对于小集合 10个元素或更少 ListDictionary比Hashtable快 SortedDictionary泛型类提供比Dictionary泛型类更快的查找 7 是否需要只接受字符串的集合 如StringCollection和StringDictionary等 集合的创建与操作 1 动态数组类ArrayList2 队列Queue3 栈Stack4 哈希表Hashtable5 字符串字典StringDictionary6 键 值对集合NameValueCollection 1 动态数组类ArrayList 1 ArrayList与Array的区别Array的大小是固定的 而ArrayList的大小可根据需要自动扩充 在Array中一次只能获取或设置一个元素的值 而在ArrayList中允许添加 插入或移除某一范围的元素 Array的下限可以自定义 而ArrayList的下限始终为零 Array可以具有多个维度 而ArrayList始终只是一维的 Array位于System命名空间中 ArrayList位于System Collections命名空间中 2 创建动态数组 ArrayList列表对象名 newArrayList 例如 ArrayListlist newArrayList list Add 罗福强 list Add 30 2 队列Queue 队列的特点一种先进先出的数据结构 当插入或删除对象时 对象从队列的一端插入 从另外一端移除创建队列对象Queue队列名 newQueue 队列长度 增长因子 说明 队列长度默认为32 增长因子默认为2 0 即每当队列容量不足时 队列长度调整为原来的2倍 注意 由于调整队列的大小需要付出一定的性能代价 因此建议在构造队列时指定队列的长度 队列包括Enqueue Dequeue Peek Clear和Contains等方法 其中 Enqueue和Dequeue每操作一次只能添加或删除一个数据 例如 Queueq newQueue 50 3 0 q Enqueue 董涛 q Enqueue 徐磊 构造函数 Queue举例 3 栈Stack 栈的特点 一种先进后出的数据结构 这种数据结构在插入或删除对象时 只能在栈顶插入或删除 创建栈对象 Stack栈名 newStack 栈包括Push Pop Peek Clear和Contain等方法 其中 Push和Pop每操作一次只能添加或删除一个数据 例如 Stacks newStack s Push 成都 s Push 四川 构造函数 Stack举例 4 哈希表Hashtable 哈希表又称散列表 表示键 值对的集合 建不能为空 值可以 哈希表的特点 在保存集合元素时 首先要根据键自动计算哈希代码 以确定该元素的保存位置 再把元素的值放入相应位置所指向的存储桶中 查找时 再次通过键所对应的哈希代码到特定存储桶中搜索 创建哈希表对象Hashtable哈希表名 newHashtable 哈希表长度 增长因子 说明 默认长度为0 默认增长因子为1 0哈希表包括Add Remove Clear和Contains等方法 其中 Add方法需要两个参数 一个是键 一个是值 Remove方法只需要一个键名参数 例如 Hashtableh newHashtable h Add 1001 李天军 h Add 1002 张凯 h 1001 可得到 李天军 构造函数 HashTable构造函数太多 不一一列举 相见CSDN帮助文档 HashTable举例 5 字符串字典StringDictionary 字符串字典StringDictionary是一种把键和值强类型化为字符串而不是对象的哈希表 其中 键不能为null 且不区分大小写 例如 StringDictionarymyCol newStringDictionary myCol Add 姓名 罗福强 myCol Add 性别 男 foreach DictionaryEntrydeinmyCol Console WriteLine 0 t 1 n de Key de Value 6 键 值对集合NameValueCollection 键 值对集合NameValueCollection表示元素为键名 键值对的集合 且元素的键名和键值均为字符串 一个键可对应多个值 例如 NameValueCollectionmyCol newNameValueCollection myCol Add 姓名 罗福强 myCol Add 性别 男 foreach StringsinmyCol AllKeys Console WriteLine 0 t 1 s myCol s for inti 0 i myCol Count i Console WriteLine 0 t 1 myCol getKey i myCol get i 演示 源代码见帮助文档 索引器 索引器的定义与使用接口中的索引器索引器与属性的比较 索引器的定义与使用 索引器的定义索引器的使用 索引器的定义 索引器是一种特殊的类成员 它能够让对象以类似数组的方式来存取 使程序看起来更为直观 更容易编写 一般形式如下 修饰符 数据类型this 索引类型index get 获得属性的代码 set 设置属性的代码 说明 其中的数据类型是相关数组或集合的类型 索引类型表示数组或集合元素的类型 this表示操作本对象的数组或集合成员 可以简单把它理解成索引器的名字 因此索引器不能具有用户定义的名称 索引器示例 classZ 可容纳100个整数的整数集 privatelong arr newlong 100 publiclongthis intindex 声明索引器 get if index 100 return0 elsereturnarr index set if index 100 arr index value 索引器的使用 通过索引器可以存取类的实例的数组成员 操作方法与数组相似 一般形式如下 对象名 索引 其中 索引的数据类型必须与索引器的索引类型相同 例如 Zz newZ Z是包含索引器的类z 0 100 z 1 101 接口中的索引器 在接口中也可以声明索引器 接口索引器与类索引器的区别有两个 一是接口索引器不使用修饰符 二是接口索引器只包含访问器get或set 没有实现语句 例如 索引器与属性的比较 泛型 一 泛型概述二 泛型接口 泛型类及泛型方法 一 泛型概述 1 什么是泛型2 为什么要引入泛型3 NETFramework2 0的泛型类 1 什么是泛型 泛型是通过 参数化类型 来实现在同一则代码中操作多种数据类型 泛型类型是一种编程范式 它利用 参数化类型 将类抽象化 从而实现更为灵活的复用 泛型赋予了代码更强的安全性 更好的复用 更高的效率和更清晰的约束 2 为什么要引入泛型 通常在讨论数组时都需要预设一个前提 即到底要解决的是整数 小数 还是字符串的运算问题 因此 在使用数组时需要首先确定数组的类型 然后再把相同类型的数据放入数组中 例如 把100个整数存入数组中 得到一个整型数组 而把100个自定义的Student对象存入数组中 得到一个对象型或Student型数组 利用数组来管理数据 虽然直观 容易理解 但存在很大的局限性 仍然需要重复编写几乎完全相同的代码来完成排序和查找操作 为此 C 提供了一种更加抽象的数据类型 泛型 以克服数组的不足 当利用泛型来声明这样一个更抽象的数据类型之后 再也不需要针对诸如整数 小数 字符 字符串等数据重复编写几乎完全相同的代码 具体思路如下 首先声明这种泛型数据类型 声明时不用指定要处理的数据的类型 只讨论抽象的数据操作 如排序 查找等 在实际引用这种泛型数据类型时 先确定要处理的数据类型 再执行相应的操作 因此 泛型是一种 泛泛而谈 的数据类型 3 NETFramework2 0的泛型类 1 NetFramework提供的泛型集合类 包括List Queue Stack Dictionary等 这些集合类实现了增加 删除 清除 排序和返回集合元素值的操作 且这些操作方法对任意类型的数据都有效 2 列表List的使用格式 List对象名 newList 例如 Listlist newList list Add 罗福强 list Add 30 3 字典Dictionary的使用格式 Dictionary对象名 newDictionary 例如 Dictionarydic newDictionary dic Add 姓名 罗福强 dic Add 性别 男 二 泛型接口 泛型类及泛型方法 1 泛型接口2 泛型类3 泛型方法 1 泛型接口 1 泛型接口通常用来为泛型集合类或者表示集合元素的泛型类定义接口 对于泛型类来说 从泛型接口派生可以避免值类型的装箱和拆箱操作 2 NetFramework的泛型接口 3 自定义泛型接口的一般形式 访问修饰符 interface接口名 接口成员 例如 interfaceIDate 2 泛型类 当一个类的操作不针对特定或具体的数据类型时 可把这个类声明为泛型类 泛型类最常用于集合 如链接列表 哈希表 堆栈 队列和树等 一般情况下 创建泛型类的过程为 从一个现有的具体类开始 逐一将每个类型更改为类型参数 一直达到通用化和可用性的最佳平衡 定义泛型类的一般形式其中 类型参数列表 不指定数据类型 当具有多个类型参数时使用逗号分隔 类型参数约束 用来限定泛型类所要处理的数据类型 用where关键字指定 常见的类型参数约束 定义泛型类的注意事项 创建自定义的泛型类时 需要特别注意以下事项 1 将哪些类型通用化为类型参数一般规则是 能够参数化的类型越多 代码就会变得越灵活 重用性就越好 但太多的通用化会使其他开发人员难以阅读或理解代码 2 如果存在约束 应对类型参数应用什么约束一般规则是 应用尽可能最多的约束 但仍能够处理需要处理的类型 例如 如果知道泛型类仅用于引用类型 则应用类约束 这可以防止泛型类被意外地用于值类型 并允许对T使用as运算符以及检查空值 3 是否将泛型行为分解为基类和子类由于泛型类可以作为基类使用 其注意事项与非
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度生态修复用草种生产及区域销售代理合同
- 2025年环保产业展览会特制展台设计、施工与维护服务协议
- 2025年高品质保健品检测及安全监控执行协议
- 2025学生生态科普游学项目合作协议
- 2025年城市综合体餐饮联营项目合作协议
- 2025年城市地下综合管廊清洁保养与安全管理服务协议
- 2025年农产品仓储租赁合同:附仓储条件及货物保险条款
- 2025型豪华轿车使用权与深度维护一体化服务协议
- 2025年生物制药企业研发团队劳动合同范本
- 2025年智能实训室设备采购与维护服务合同
- 2025广西公需科目考试题库和答案(覆盖99%考题)广西一区两地一园一通道+人工智能时代的机遇
- 消防桌面应急预案方案(3篇)
- 山区救援网2025年灾害救援装备研发趋势分析报告
- (2025年标准)校车修理协议书
- 服装厂 安全生产管理制度
- 2025年山东省教育厅直属事业单位招聘18人笔试模拟试题带答案详解
- 2025年中小学体育教师招聘考试专业基础知识考试题库及答案(共2687题)
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 酒店股东消费管理办法
- 导数的几何意义及其应用-2026届高三数学一轮复习
- 车辆事故转让协议书范本
评论
0/150
提交评论