




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
集合思政目标:
☞理解程序中集合的必要性,方便以后深入地学习
☞明白基础的重要性,基础扎实能减少编程错误技能要求:
☞掌握集合的基本概念和用法,理解泛型类
☞了解常用的普通集合类和泛型集合类实践目标:
☞能够正确区分普通集合和泛型集合
☞熟练地对集合进行操作
☞能够对数组有进一步的认识第11章常用普通集合泛型泛型集合常用普通集合01PARTArrayListArrayList与数组类似,但与数组相比,ArrayList有其独特的优势。Arraylist优势在于:没有固定的大小,可以根据需求增长,其默认大小为0个元素(注:不同的环境下有可能不一样),当存储容量不足时,按照2的幂次规律扩容。案例当添加第5个元素时会自动扩展到8个;当然也可以显式地指定其容量。ArrayList的另一个优势在于:它可以存储不同类型的元素,因为所有ArrayList中的元素都是对象(System.Object)ArrayList的典型构造方法常用普通集合ArrayList集合的常用方法常用普通集合方法使用举例功能Add()al.Add(1)将对象添加到ArrayList的末尾Remove()al.Remove(obj)从ArrayList中除去第一个匹配的项RemoveAt()al.RemoveAt(1)删除指定索引的项Clear()al.Clear()从ArrayList中除去所有元素Insert()al.Insert(8,1)将元素插入到指定索引的ArrayListTrimToSize()al.TrimToSize()设置ArrayList中元素实际数的大小Sort()al.Sort()对ArrayList中的元素进行排序Reverse()al.Reverse()对ArrayList中的元素进行倒转ToArray()al.ToArray()al.ToArray(typeof(Int32))将ArrayList集合转换为ArrayArrayList的元素添加及遍历从上述示例可知:(1)ArrayList集合的默认容量为0。(2)ArrayList集合的容量可以自动扩展,其扩展是按照2的幂次递增的。(3)ArrayList的Capacity属性表示容量,而Count属性表示其中容纳元素的实际数目。(4)对ArrayList元素的遍历,既可以使用foreach循环,也可以使用for循环和索引来进行访问。(5)ArrayList集合比数组的使用更为灵活。常用普通集合集合中不同数据类型元素的存储与读取集合还具备存储各种数据类型的能力,不过需要注意的是,当往集合中存储的数据类型不一致时,从集合读取数据就需要完成适当的转换动作,即拆箱操作,否则会导致异常。常用普通集合示例分析从本例可以看到:(1)可以显示指定ArrayList集合的容量,此时其容量将不再具有2的幂次的规律。(2)ArrayList中可以添加各种数据的类型。(3)ArrayList中存放的数据类型若不相同,则读取时需要进行拆箱操作。常用普通集合使用ArrayList内置的Sort()方法进行排序常用普通集合146523对象按照先进先出,先来先服务的原则。当队列缓冲区空间不足时,按2的幂次增长规律创建一个新的缓冲区,并将现有对象复制到新缓冲区中。常用普通集合Queue(队列)具备如下特点Queue常用方法常用普通集合方法含义Enqueue()入队Dequeue()出队Peek()取队头而不删Clear()清空队列Contains()检测队列是否包含指定元素ToArray()将队列转换为ArrayGetEnumerator()获取一个能够循环访问队列枚举数的IEnumerator接口示例,如果Queue内容没有改变,可以通过该接口示例的Reset()方法实现多次遍历,当Queue内容发生变化时,需要重新获取该接口示例Queue示例化方法常用普通集合示例常用普通集合示例分析(1)元素you是最先被Enqueue()方法添加进队列的,所以通过Dequeue()取元素时,you也是最先出队列的,此即先进先出。(2)Peek()和Dequeue()都可以用来获取队列的第一个元素,即最先入列的那个元素,不同之处在于:Peek()仅读取队列首个元素,而不会删除元素;而Dequeue()在读取队首元素的同时,会删除元素。常用普通集合(3)通过队列示例的GetEnumerator()方法可以获取一个枚举器实现对队列内容的遍历访问,但是该枚举器只能用来遍历一次,如果想要重复使用,则每次使用前应该调用其Reset()方法。(4)一旦队列的内容发生变化,则只能重新获取一个枚举器,不能通过Reset()方法来处理。除了上述所使用的GetEnumerator()方法来实现对队列元素的遍历,还可以通过普通的循环来遍历访问常用普通集合应注意的是,此种遍历方式会导致当遍历完毕时,队列里面不再有元素,这是Dequeue()方法的特性所致栈和队列的区别Stack(栈)与Queue(队列)比较类似,其特性是:元素遵从后进先出的原则,即最后插入的对象位于栈的顶端,将会最先出来。常用普通集合Stack常用方法常用普通集合方法含义Push()进栈Pop()出栈Peek()取栈尾而不删Clear清空栈Contains()检测栈中是否包含某个元素ToArray()将队列转换为ArrayGetEnumerator()获取一个能够循环访问队列枚举数的IEnumerator接口示例,如果Queue内容没有改变,可以通过该接口示例的Reset()方法实现多次遍历,当Queue内容发生变化时,需要重新获取该接口示例Stack常用的示例化方式常用普通集合示例常用普通集合从上例可见:Peek()只读不删,而Pop()在读的同时就删除了所读的元素。栈的循环遍历示例常用普通集合通过上例可以看到,后入栈的元素将会先出栈,其循环遍历的注意事项同Queue。与队列的循环遍历一样,可以使用普通循环来实现对栈的遍历访问。这种遍历方式执行完毕后,栈不再有任何元素。常用普通集合HashtableHashtable的定义Hashtable(哈希表)是一种使用频率很高的数据结构,它是由一对(key,value)类型的元素组成的集合,每个元素都是一个键值对,元素类型为DictionaryEntry。其所有元素的key必须唯一,key→value是一对一的映射,即根据key就可以在集合中找到对应的元素,故从Hashtable中读取值的速度很快。Hashtable示例化的方法常用普通集合Hashtable常用属性常用普通集合属性含义Count获取包含在Hashtable中的键值对的数目Keys获取包含Hashtable中的键的CollectionValues获取包含Hashtable中的值的CollectionHashtable常用方法常用普通集合方法含义Add()将指定键和值的元素添加到Hashtable中Remove()从Hashtable中移除带有指定键的元素Clear()清空HashtableContainsValue()用于检索集合中是否存在指定的值元素,返回值为bool型ContainsKey()用于检索集合中是否存在指定的键元素,返回值为bool型示例常用普通集合Hashtable属性和方法的使用示例常用普通集合Hashtable属性和方法的使用示例分析(1)Hashtable中已经存在某个键时,将不能再添加相同的键。(2)需要修改Hashtable中的元素值时,通过键操作即可。(3)如果想单独访问所有的键,可以借助属性Keys。(4)如果想单独访问所有的值,可以借助属性Values。常用普通集合(5)如果想检测某个键是否存在,应该使用ContainsKey()方法。(6)如果想检测某个值是否存在,应该使用ContainsValue()方法。(7)Hashtable中的键和值都可以是任意类型,不要求相同。(8)若键或值的类型不一致时,循环遍历的时候注意要进行适当的拆箱操作。示例常用普通集合在上面的示例中演示了如何分别循环遍历Hashtable的键和值,有些情况下希望同时获得键和值,此时可以根据Hashtable的元素类型为DictionaryEntry,使用foreach循环来实现键和值的同时获取SortedList示例化方式SortedListSortedList与Hashtable类似,表示键值对的集合,也可以使用键来访问。不同点在于SortedList集合的元素根据对应的键进行了排序,可以对集合中的元素使用整型数值进行索引,类似于数组,所以对于SortedList,具备键和索引两种访问方式。常用普通集合SortedList常用属性常用普通集合内容含义Capacity获取或设置SortedList的容量Count获取SortedList中包含的元素数量Keys以数组形式返回SortedList集合中所有键(Key)Values以数组形式返回SortedList集合中所有元素值(Value)SortedList常用方法常用普通集合内容含义Add(objectkey,objectvalue)向SortedList集合中添加新的元素(键-值对应的形式)Clear()从SortedList集合中移除所有的元素GetKey(intindex)获取SortedList的指定索引处的键GetByIndex(intindex)返回指定索引的元素值GetKeyList()获取SortedList中的键GetValueList()获取SortedList中的值IndexofValue(objectkey)返回指定元素值在SortedList集合中的索引值Remove(objectkey)从SortedList集合中移除指定键值的元素RemoveAt(intindex)从SortedList集合中移除指定索引值的元素InfexOfKey(objectkey)返回指定键在SortedList集合中的索引值,索引值是从0开始计数的,即集合第一个元素的索引值是0ContainsKey(objectkey)返回布尔类型的键,表明SortedList集合中是否包含指定键的元素ContainsValue(objectvalue)返回布尔类型的值,表明SortedList集合中是否包含指定值的元素泛型02PART泛型的概念泛型是.NET2.0开始引入的一个新功能,泛型将类型参数的概念引入到.NET中。可以利用泛型创建特殊的类、方法、结构、接口、委托等;可以让类、方法、结构、接口、委托等按它们存储和操作的数据类型进行参数化;可以提供更强的编译时类型检查,减少数据类型之间的显式转换,减少装箱操作和运行时的类型检查。在泛型出现之前,凡是遇到类型不确定的场合都会通过使用类型object来实现任意数据类型的存储,这样就不可避免地出现装箱和拆箱操作。通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型。重用数据处理算法,能够显著提高性能并得到更高质量的代码。注意属性、运算符、索引器、事件不能是泛型对象。0102泛型泛型的定义T是类型形参,外带<>,是一个占位符,T将在创建类的示例时确定,此后使用真正的类型取代它;T可以在类内部修饰局部变量、作为方法参数或者作为方法返回值。另外,T并不是强制使用的,可以使用其他任何有效的标识,如V,TValue,TKey等,不过习惯以T来表达,这是约定俗成的表达方式。0304泛型示例1泛型类的定义示例泛型T是类型形参,外带<>,是一个占位符,T将在创建类的示例时确定,此后使用真正的类型取代它;T可以在类内部修饰局部变量、作为方法参数或者作为方法返回值。另外,T并不是强制使用的,可以使用其他任何有效的标识,如V,TValue,TKey等,不过习惯以T来表达,这是约定俗成的表达方式。示例2泛型世界的2012和HELLOWORLD泛型从上面的示例可以体会到泛型的优势。我们所定义的类像一个万能类型接受类,传任何类型的参数都没有问题,最主要的是,每次传的都是一个确定的类型,例如int、DataTime等,这一切,都归功于<T>。当然这个<T>只是个表象,本质是.NET框架的作用。示例3它们虽然来自于一个类,但却是该类的不同泛型版本,故它们是不同类型的引用,即不能互相赋值。泛型定义泛型类示例4可以看到该功能正常工作,能够统计出当前类被实例化的次数。泛型泛型类的实例化计数器示例5虽然是使用同一个泛型类,但是该泛型类的各个版本之间互不干扰,泛型类的同一个版本之间是共享计数器的,不同版本各自计数。泛型将上述功能改造后应用于泛型类示例6泛型示例7使用非泛型版本时,逻辑上有问题的代码,在编辑状态时没法检测出错误,只有在运行时才能够检测出来泛型Object参数泛型的两大显著优势泛型(1)代码重用。一段代码,可以针对多种数据类型来使用,不用重写相似代码。(2)提高类型安全。将运行时错误转换为编译时错误,错误的发现时机前移。示例8多参数的泛型声明形式如下泛型多参数的泛型类泛型方法分为两种:一种是存在于泛型类、泛型结构等中的泛型方法;另一种则是存在于非泛型类中的泛型方法。泛型方法使用频率很高。泛型的方法01泛型类中的<T>在类名之后,与之相似,泛型方法的<T>在方法名之后02泛型示例泛型版本不仅仅可以处理int型数据,还可处理其他类型数据。泛型为了方便对比,先给出一个传统版本,该版本仅处理整型数据泛型集合03PART04030201在使用集合时,可以把任何东西都往里面放,如int型数据、double型数据、DateTime型数据,甚至数组、对象等都可以放进去。集合这一点却也带来了一系列的问题,最主要的问题就是该过程中存在装箱和拆箱操作,效率低下,更重要的是,它有可能导致不安全问题。泛型集合既能利用集合的优点,又能避免上述不足集合的问题在使用泛型集合时,需要引用如下命名空间泛型集合普通集合和泛型集合的形式泛型集合普通集合泛型集合普通集合泛型集合ArrayListList<T>HashtableDictionary<K,V>QueueQueue<T>DictionaryEntryKeyValuePair<K,V>使用泛型List类型(即List<T>),可以创建兼具泛型优势和ArrayList优势的泛型集合。List类型明确,无需强制转换,可以通过定义时限定数据类型,使得该集合既拥有ArrayList的功能,同时还具有类型安全的特性。另外,使用List.Enumerator结构可以枚举泛型集合中的元素。List类型优势此处添加详细文本描述,建议与标题相关并符合整体语言风格,语言描述尽量简洁生动。强制转换为Object泛型集合上面的程序首先往ArrayList中存入3个整数,然而当从ArrayList中取值时,得到的却是object类型,不再是数值,因此,为了完成求和功能,不得不对取出的内容作强制转换。泛型版本则能够实现直接取值,无需转换。示例泛型集合(List<T>版本):无需转换此泛型版本仍然首先存入3个数值到List中,然后取出元素值求和,但是与非泛型版本不同的是,使用泛型版本时,当初存入的是int型,读取出来的仍然是int型,所以不必转换,即没有拆箱操作。示例泛型集合ArrayList版本示例泛型集合List<T>版本此版本无须运行,在编辑视图下即出现。可见,泛型集合同样具备泛型的特点,即将普通集合的运行时错误转换为编译时错误。HashSet类型(HashSet<T>)是一个泛型集合,它的元素具有唯一性。其容量也具有自动扩充的特性,当元素个数增加时,其容量自行扩充至与元素个数相等。其最重要的属性就是Count属性,可以通过该属性获取集合中的元素个数。该泛型集合能完成集合运算的功能,即求并集(UnionWith)、交集(IntersectWith)、差集(ExceptWith)、对称差集(SymmetricExceptWith)等ABCDHashSet类型集合运算的功能泛型集合HashSet<T>的主要方法泛型集合方法说明Add()将指定元素添加到集合中Remove()移除指定元素,当指定元素不存在时不会引发异常,当成功移除掉指定的元素时,则Count值减1RemoveWhere()移除符合条件的所有元素Clear()移除所有元素Contains()检测集合中是否包含指定的元素UnionWith()将当前集合与指定集合执行并集运算IntersectWith()将当前集合与指定集合执行交集运算SymmetricExceptWith()对称差集运算,即将两个集合求并集,再将两个集合求交集,然后用并集的结果与交集的结果做差集即可,可以参看本章的“答疑解惑”部分的“集合的运算”ExceptWith()将当前集合与指定集合执行差集运算,即当前集合中属于指定集合的元素都去除IsProperSubse
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自由配色分层编辑素材
- 二零二五委托管理物业合同范例
- 二零二五版个人土地承包合同样本
- 小学生无神论教育
- 二零二五版公司股权变更合同范例
- 股份转让协议
- 消费贷款购销合同二零二五年
- 共同购房协议书
- 有氧跑步的身心益处
- 二零二五版服装店出租合同范例
- 肺结核护理教案
- DL∕T 1084-2021 风力发电场噪声限值及测量方法
- 企业并购财务风险分析及控制
- NB-T47023-2012长颈对焊法兰
- 铝模工程劳务承包合同协议书
- 2024年高考数学1卷对高中数学教学的启发
- 预制混凝土剪力墙吊装施工技术讲解
- 2024年广西中考语文试卷真题(含官方答案及逐题解析)
- 2024年浙江长征职业技术学院单招职业技能测试题库含答案解析
- 2024年中国邮政集团有限公司校园招聘考试试题参考答案
- DZ∕T 0399-2022 矿山资源储量管理规范(正式版)
评论
0/150
提交评论