c#程序设计经典教程

上传人:第*** 文档编号:58295755 上传时间:2018-10-28 格式:PPT 页数:37 大小:627KB
返回 下载 相关 举报
c#程序设计经典教程_第1页
第1页 / 共37页
c#程序设计经典教程_第2页
第2页 / 共37页
c#程序设计经典教程_第3页
第3页 / 共37页
c#程序设计经典教程_第4页
第4页 / 共37页
c#程序设计经典教程_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《c#程序设计经典教程》由会员分享,可在线阅读,更多相关《c#程序设计经典教程(37页珍藏版)》请在金锄头文库上搜索。

1、1,C#程序设计经典教程,第六章 集合、索引器与泛型,1. 总体要求 了解.NET类库中的集合类,初步掌握常用集合的创建和操作方法。 理解索引器的概念,能区别索引器与属性,掌握索引器的定义与使用。 了解泛型的相关概念,初步掌握泛型接口、泛型类、泛型属性和泛型方法的使用。 2. 相关知识点 熟悉类和数组的定义和使用。 熟悉类的方法成员的定义与使用等基本操作。,3. 学习重点 集合、索引器、泛型的定义与使用。 4. 学习难点 索引器的作用、定义与使用方法 泛型的概念和意义,泛型的定义和使用方法,第六章 集合、索引器与泛型,第六章 集合、索引器与泛型,主要内容 6.1 集合 6.2 索引器 6.3

2、泛型,6.1 集合,6.1.1 集合概述 6.1.2 ArrayList 6.1.3 哈希表Hashtable 6.1.4 栈和队列,6.1.1 集合概述,集合能随意调整大小,集合可以把一组类似的对象组合在一起。任何类型的对象都可被组合到一个Object类型的集合中,并通过C#的foreach语句来访问其中的每一个对象。操作过程中MyClass 的对象与Object对象之间 MyClass mcObj;装箱: Object obj = mcObj (无需显式转换)拆箱: mcObj = ( MyClass )obj (事先装箱的) 对象类型的集合位于System.Collections命名空间

3、;,6.1 数组类 Array,数组是简单集合 System.Array类是所有数组的基类(特殊类,不能用于派生),public abstract class Array: ICloneable,IList /类体:实现了多个接口/(数组操作的常用属性和方法,多为静态) ,interface ICollection int Count get; void CopyTo(Array array,int index);bool IsSynchronizedget;object SynchRootget; ,interface ICloneable object Clone(); ,interfac

4、e IList : Collection, IEnumerable int Add(objdect value);void Clear();bool Contains(object value);int IndexOf(object value);void Remove(object key);void RemoveAt(int index);void Insert(int index,object value); ,interface IEnumerator Object Current get; bool MoveNext (); void Reset () ,interface IEnu

5、merable / foreach 遍历的基础 IEnumerator Getenumerator(); ,public static void Main() int a = new int 3;Array b =Array.CreateInstance(typeof(int), 3);for (int i=0; i3; i+) a I = 2*i; b.SetValue( 3*i , i ); foreach (int x in a)console.Write( “0 ” ,x);foreach (int x in b)console.Write( “0 ” ,x); ,接口中的方法:默认是

6、public abstract 的。 继承接口的类:必须实现接口中的所有属性和方法,否则该类是抽象的。,6.1.4 栈和队列,1栈StackStack类实现了先进后出的数据结构,这种数据结构在插入或删除对象时,只能在栈顶插入或删除。创建栈对象的一般形式如下:Stack 栈名 = new Stack(); Stack类提供了栈常用操作方法,包括在栈顶添加数据、移除栈顶数据、返回栈顶数据、清空栈和检查是否包含某个数据等,方法名分别为Push、Pop、Peek、Clear和Contains。其中,Push和Pop每操作一次只能添加或删除一个数据。,a1,a2,an,栈底,栈顶,出栈,进栈,6.1.4

7、 栈和队列,2队列Queue Queue类实现了先进先出的数据结构,这种数据结构把对象放进一个等待队列中,当插入或删除对象时,对象从队列的一端插入,从另外一端移除。 队列可以用于顺序处理对象,因此队列可以按照对象插入的顺序来存储。创建队列对象的一般形式如下:Queue 队列名 = new Queue(队列长度,增长因子); 其中,队列长度默认为32。增长因子默认为2.0,即每当队列容量不足时,队列长度调整为原来的2倍,可重新设置增长因子的大小。,a1 a2 a3 an,队头,队尾,出队,入队,10,集合类的选择,选择集合类时,一般要考虑以下问题: (1)是否需要一个序列列表,需要先进先出行为时

8、可使用 Queue 队列类,在需要后进先出行为时可使用 Stack栈类。 (2)是否需要随机访问集合中的元素,此时不能选择Queue 队列类、Stack栈类、LinkedList 双向链表类 (3)是否需要通过索引访问每个元素,只有ArrayList、StringCollection等是从索引为零的元素开始逐个访问集合元素。Hashtable、Dictionary通过元素的键(即元素名字)提供对元素的访问。而NameValueCollection 类和SortedList 泛型类通过其元素的从零开始的索引,或者通过其元素的键提供对元素的访问。 (4)是否包含一个值、一个键和一个值的集合,还是一

9、个键和多个值的集合。其中,“一个值”的集合是一种基于 IList 列表接口派生的集合,“一个键和一个值”的集合是一种基于IDictionary字典接口的集合,“一个键和多个值”的集合是 NameValueCollection 类。,11,集合类的选择(续),(5)是否需要用与输入元素方式不同的方式对元素排序。Hashtable 按其元素的哈希代码对元素排序,SortedList以及 SortedDictionary根据 IComparer 实现按键对元素的排序,而ArrayList提供 Sort 排序方法。 (6)是否需要信息的快速搜索和检索,对于小集合(10个元素或更少),ListDicti

10、onary 比 Hashtable 快,SortedDictionary 泛型类提供比 Dictionary 泛型类更快的查找。 (7)是否需要只接受字符串的集合,如StringCollection和 StringDictionary等。,12,三、集合的创建与操作,1. 动态数组类ArrayList 2. 队列Queue 3. 栈Stack 4. 哈希表Hashtable 5. 字符串字典StringDictionary,1. 动态数组类ArrayList,ArrayList:可以看作是能够自动增长容量的动态数组,它实现了IList接口。(1)Capacity 集合容量,读写属性(2)Cou

11、nt 获取列表中实际包含元素的个数(3)Add()方法:列表末尾添加元素(4)Insert()方法:列表指定位置添加元素(5)Remove()方法:移除特定对象(6)RemoveAt()方法:根据索引值移除对象,14,1. 动态数组类ArrayList,(1) ArrayList与Array的区别 Array 的大小是固定的,而 ArrayList的大小可根据需要自动扩充; 在Array中一次只能获取或设置一个元素的值,而在ArrayList中允许添加、插入或移除某一范围的元素; Array 的下限可以自定义,而ArrayList的下限始终为零; Array 可以具有多个维度,而 ArrayL

12、ist始终只是一维的; Array 位于 System 命名空间中,ArrayList 位于 System.Collections 命名空间中。 (2) 创建动态数组: ArrayList 列表对象名 = new ArrayList( ); 例如, ArrayList list = new ArrayList();list.Add(“罗福强“);list.Add(30);,15,2. 队列Queue,队列的特点 一种先进先出的数据结构,当插入或删除对象时,对象从队列的一端插入,从另外一端移除 创建队列对象 Queue 队列名 = new Queue(队列长度,增长因子); 说明,队列长度默认为

13、32,增长因子默认为2.0(即每当队列容量不足时,队列长度调整为原来的2倍) 注意,由于调整队列的大小需要付出一定的性能代价,因此建议在构造队列时指定队列的长度。 队列包括Enqueue、Dequeue、Peek、Clear和Contains等方法。其中,Enqueue和Dequeue每操作一次只能添加或删除一个数据。 例如: Queue q = new Queue(50,3.0); q.Enqueue(“董涛“); q.Enqueue(“徐磊“);,16,3. 栈Stack,栈的特点: 一种先进后出的数据结构,这种数据结构在插入或删除对象时,只能在栈顶插入或删除。 创建栈对象: Stack

14、栈名 = new Stack( ); 栈包括Push、Pop、Peek、Clear和Contain等方法。其中,Push和Pop每操作一次只能添加或删除一个数据。 例如: Stack s = new Stack(); s.Push(“成都“); s.Push(“四川“);,17,4. 哈希表Hashtable,哈希表又称散列表,表示键/值对的集合。 哈希表的特点:在保存集合元素时,首先要根据键自动计算哈希代码,以确定该元素的保存位置,再把元素的值放入相应位置所指向的存储桶中。查找时,再次通过键所对应的哈希代码到特定存储桶中搜索。 创建哈希表对象 Hashtable 哈希表名 = new Has

15、htable(哈希表长度,增长因子); 说明,默认长度为0,默认增长因子为1.0 哈希表包括Add、Remove、Clear和Contains等方法。其中, Add方法需要两个参数,一个是键,一个是值;Remove方法只需要一个键名参数。 例如:Hashtable h = new Hashtable(); h.Add(1001,“李天军“); h.Add(1002,“张凯“);,18,5. 字符串字典StringDictionary,字符串字典StringDictionary是一种把键和值强类型化为字符串而不是对象的哈希表。其中,键不能为null,且不区分大小写。 例如: StringDict

16、ionary myCol = new StringDictionary(); myCol.Add( “姓名“, “罗福强“ ); myCol.Add( “性别“, “男“ ); foreach ( DictionaryEntry de in myCol )Console.WriteLine( “0t 1n“, de.Key, de.Value );,6.2 索引器,6.2.1 索引器的定义与使用 6.2.2 索引器与属性的比较,返回,6.2.1 索引器的定义与使用,1索引器的定义 C#中的类成员可以是任意类型,包括数组或集合。当一个类包含了数组或集合成员时,索引器将大大简化对数组或集合成员的存取操作。,

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

当前位置:首页 > 办公文档 > 事务文书

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