Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章

上传人:E**** 文档编号:89397982 上传时间:2019-05-24 格式:PPT 页数:16 大小:881KB
返回 下载 相关 举报
Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章_第1页
第1页 / 共16页
Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章_第2页
第2页 / 共16页
Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章_第3页
第3页 / 共16页
Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章_第4页
第4页 / 共16页
Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章》由会员分享,可在线阅读,更多相关《Visual C# 2008程序设计-电子教案+习题答案+源代码-曹静 PPT 第7章(16页珍藏版)》请在金锄头文库上搜索。

1、Visual C# 2008程序设计,第7章 集合和泛型,2019年5月24日星期五,Visual C# 2008程序设计,第7章 集合和泛型,7.1 集合与集合接口 7.2 泛型集合,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,集合就如同数组,用来存储和管理一组特定类型的数据对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。在使用数组和集合时要先加入System.Collections命名空间,它提供了支持各种类型集合的接口及类。集合本身上也是一种类型,基本上可以将其作为

2、用来存储一组数据对象的容器,由C#面向对象的特性,管理数据对象的集合同样被实现成为对象,而存储在集合中的数据对象则被称为集合元素。,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,C# ArrayList正是采用上述方法来动态改变数组大小的。C# ArrayList又被称为动态数组,它的存储空间可以被动态改变,同时还拥有添加、删除元素的功能。 ArrayList类派生自System.Collections,在使用时需要事先声明并引用该命名空间。下面以一个例子来说明如何适用ArrayList类。在这个例子中演示了如何创建ArrayList,并输出该动态数

3、据组的值。 【例7-1】ArrayList用法举例。 / Ch07_01.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections;/自己添加的代码 namespace Ch07_01 class Program ,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,public static void Main() / 创建并初始化一个ArrayList. ArrayList myAL

4、= new ArrayList(); myAL.Add(“Hello“); myAL.Add(“World“); myAL.Add(“!“); / 显示ArrayList个数. Console.WriteLine(“ myAL“); Console.WriteLine(“ Count: 0“, myAL.Count); Console.Write(“ Values:“); PrintValues(myAL); /显示ArrayList public static void PrintValues(IEnumerable myList) foreach (Object obj in myList

5、) Console.Write(“ 0“, obj); Console.WriteLine(); ,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对. Hashtable的主要操

6、作: 在哈希表中添加一个key/value键值对: HashtableObject.Add(key,value); 在哈希表中去除某个key/value键值对: HashtableObject.Remove(key); 通过键获得值:HashtableObjectkey 判断哈希表是否包含特定键key: HashtableObject.Contains(key);,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,【例7-2】Hashtable用法举例。 / Ch07_02.cs using System; using System.Collection

7、s.Generic; using System.Linq; using System.Text; using System.Collections; /自己添加的代码 namespace Ch07_02 class Program public static void Main() / 创建新哈希表 Hashtable openWith = new Hashtable(); / 为哈希表增加键值对,其中键不可重复,但值可以重复 openWith.Add(“txt“, “notepad.exe“); openWith.Add(“bmp“, “paint.exe“); openWith.Add(“

8、dib“, “paint.exe“); openWith.Add(“rtf“, “wordpad.exe“); / 如果增加的键与哈希表中已有的键重复,则抛出异常,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,try openWith.Add(“txt“, “winword.exe“); catch Console.WriteLine(“哈希表中已包含以 “txt“为键的元素.“); / 可以通过键获得该键对应的值 Console.WriteLine(“键 = “rtf“, 值 = 0.“, openWith“rtf“); /修改键所对应的值 ope

9、nWith“rtf“ = “winword.exe“; Console.WriteLine(“键 = “rtf“, 值 = 0.“, openWith“rtf“); /如果不存在该键,将为哈希表增加键值对,如果存在该键,则修改值。 openWith“doc“ = “winword.exe“; / 首先查看是否包含某键,再增加 if (!openWith.ContainsKey(“ht“) openWith.Add(“ht“, “hypertrm.exe“); Console.WriteLine(“为 键 = “ht“增加值: 0“, openWith“ht“); /遍历哈希表中所有键值对 Co

10、nsole.WriteLine(); foreach (DictionaryEntry de in openWith) Console.WriteLine(“键 = 0, 值 = 1“, de.Key, de.Value); ,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,/ 获得值的集合 ICollection valueColl = openWith.Values; / 通过强制类型转化获得值集合中的对象 Console.WriteLine(); foreach (string s in valueColl) Console.WriteLine(

11、“值 = 0“, s); / 获得键集合 ICollection keyColl = openWith.Keys; / 通过强制类型转化获得键集合中的对象 Console.WriteLine(); foreach (string s in keyColl) Console.WriteLine(“键 = 0“, s); / 利用Remove方法根据键删除哈希表中的键值对 Console.WriteLine(“n 删除“doc“); openWith.Remove(“doc“); if (!openWith.ContainsKey(“doc“) Console.WriteLine(“键 “doc“

12、 不存在.“); ,2019年5月24日星期五,Visual C# 2008程序设计,7.1 集合与集合接口,接口在具体集合类的实现中扮演着非常重要的角色,所有集合都直接或间接基于ICollection接口。 ICollection接口:集合类的基接口,包含表示集合中元素个数、是否为线程安全等成员属性,还包含一个将集合元素复制到数组的方法。 IComparer接口:提供了用于比较两个对象的方法,如果希望集合中的对象可以排序,这个方法有很重要的作用。 IDictionary接口:允许对象将其数据表示为键-值对集合。 IEnumerator、IEnumerable接口:支持foreach对集合的一

13、种简单迭代处理,迭代时只能读取集合中的数据。 IList接口:所有列表的基接口,控制能否在列表中修改、增加、删除元素。 在基于IList接口的集合中(如Array、ArrayList或List)或直接基于ICollection接口的集合中(如Queue、Stack或inkedList),每个元素都包含一个值。在基于IDictionary接口的集合中(如Hashtable和SortedList类、或者Dictionary和SortedList泛型类),每个元素都包含一个键和值。,2019年5月24日星期五,Visual C# 2008程序设计,7.2 泛型集合,7.1节中介绍了集合类。任何类型的

14、对象要存储在集合类中都必须强制转化为Object类型,当从集合类中获得元素时又要转化成先前的类型。为了让编译提供更强的编译时类型检查,减少数据类型之间的显示转换,以及装箱操作和运行时类型检查,C#引入了泛型的概念。简单的说,泛型可以让类、结构、接口、委托和方法按照自己存储的操作的数据类型进行参数化。 ArrayList primes = new ArrayList(); primes.Add(1); primes.Add(3); primes.Add(“text“); int pSum = (int)primes0 + (int)primes1; 可以替换为如下代码,其中使用了泛型版本的Arr

15、ayList: List primes = new List(); primes.Add(1); primes.Add(3); / primes.Add(“text“); /无法通过编译 int pSum = primes0 +primes1;,2019年5月24日星期五,Visual C# 2008程序设计,7.2 泛型集合,List声明中包含一个类型参数,它告诉编译器:对象可以包含什么类型的数据(在上面的例子中,类型为int),然后编译器生成需要指定类型的代码。对于开发人员来说,这就消除了运行时的强制类型转换和类型验证工作。从内存利用和效率的角度来看,如果集合中存储的是基本类型,那么还消除

16、了装箱(转换为对象)的过程。,2019年5月24日星期五,Visual C# 2008程序设计,7.2 泛型集合,Stack又称为堆栈或栈,它是一种重要的线性数据结构,栈只能在一端进行数据输入和输出操作,且遵循“后进先出”的原则,它有一个固定的栈底和浮动的栈顶。向栈中输入数据的操作称为“入栈”,被压入的数据保存在栈顶,同时栈顶指针上浮一个;同样从栈中输出数据的操作称为“出栈”,只有栈顶元素才能出栈,如果栈顶指针指向了栈底,说明当前的栈是空的。 Stack类时用来实现栈的工具类,它能实现栈操作的主要方法,如下所示: (1)Push(object obj)方法:将指定对象压入栈的顶部; (2)Pop()方法:移出并返回位于Stack顶部的对象; (3)Peek()方法:返回位于栈顶

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号