数组和集合PPT课件

上传人:鲁** 文档编号:579450666 上传时间:2024-08-26 格式:PPT 页数:34 大小:140.50KB
返回 下载 相关 举报
数组和集合PPT课件_第1页
第1页 / 共34页
数组和集合PPT课件_第2页
第2页 / 共34页
数组和集合PPT课件_第3页
第3页 / 共34页
数组和集合PPT课件_第4页
第4页 / 共34页
数组和集合PPT课件_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《数组和集合PPT课件》由会员分享,可在线阅读,更多相关《数组和集合PPT课件(34页珍藏版)》请在金锄头文库上搜索。

1、 -数组和集合C#程序设计主要内容主要内容System.Array类数组的相关操作集合框架集合集合一个集合是一个对象,它代表了一组对象,可以看作是一组对象的容器。数组是简单集合,System.Array类是一切数组的基类System.Array类型类型 System.Array类是一些原始方法和一系列接口实现的混合体。 类定义:public abstract class Array:ICloneable,ICollection,IList,IEnumerable/类体n n所谓框架就是一个类库的集合,集合框架就是一个用来表示和操作集合的一致的架构,包含了实现集合的接口与类n nICloneab

2、len nIEnumerablen nIEnumerator集合框架中的接口集合框架中的接口集合框架中的接口集合框架中的接口n nICloneable:提供了创建现有对象的副本的规范方式。n ninterface ICloneablen n object Clone();n nn nClone()方法会前往一个与当前对象类型一样的新实例,这个前往的n n对象会被初始化为与当前对象一样的内容。n n1、影子复制n n2、深度复制IEnumerable可枚举接口: 假设某个类实现了IEnumerable接口,那么称该类是可枚举的,可枚举类型都可以运用foreach循环来遍历集合中的每个元素。一切集

3、合类都实现了该接口。 interface IEnumerable IEnumerator Getenumerator();集合框架中的接口集合框架中的接口n nIEnumerator枚举器接口:n n 它提供的方法成员用于查询可枚举集合的形状及访问集合中的元素。它给我们提供了一种通用的方式来访问集合中的元素。n n interface Ienumeratorn n Object Current get; n n bool MoveNext ();n n void Reset () n n集合框架中的接口集合框架中的接口可枚举集合IEnumerator枚举器对象IEnumerable集合框架中的

4、接口集合框架中的接口Iterator方式在.NET类库中的实现Reset()MoveNext()CurrentGetEnumerator()方法产生遍历集合集合框架中的接口集合框架中的接口Iterator方式作用:对集合中的一系列元素进展访问。根本思想:集合对象只担任维护集合中的各个元素,而对元素的访问那么经过定义一个新的枚举器对象来进展;枚举器对象担任获取集合中的元素,并允许按照特定的顺序来遍历这些元素。迭代器的任务原理迭代器的任务原理前往的元素MoveNext()MoveNext()MoveNext()Reset()Current前往当前元素集合类集合类n nC#以数组方式提供对集合的支持

5、。但数组是定长的,假设元素会不断增长或缩减,那么数组就难当此任了。n n集合类那么很好地处理了这些问题。集合框架中的接口集合框架中的接口根本接口:ICloneableIEnumerableIEnumeratorICollectionIListIDictionary 这些接口通常都是大多数集合类实现的ICollection:一切集合的根本,为.NET框架中的一切集合类所实现。该接口定义了集合类的最低约束。interface ICollection int Count get; void CopyTo(Array array,int index); bool IsSynchronizedget;

6、object SynchRootget;集合框架中的接口集合框架中的接口IList:实现了IList的集合提供类似于列表的语法。interface IList int Add(object value); void Remove(object key); void Insert(int index,object value); void Clear(); bool Contains(object value); int IndexOf(object value); void RemoveAt(int index); 集合框架中的接口集合框架中的接口IDictinary :由支持将关键字映射到值

7、这一操作的集合类所实现。interface IDictionary ICollection Keys get; ICollection Values get; object this object key get; set; void Add(object key,object value); bool Contains(object key); void Remove(object key); IDictionaryEnmerator GetEnumerator(); 集合框架中的接口集合框架中的接口集合框架中的实现类集合框架中的实现类ICollectionIEnumerableIClone

8、ableIListArrayList Hashtable SortedList IDictionary集合框架中的实现类集合框架中的实现类ICollectionIEnumerableICloneableIListStack Queue IDictionaryArrayListn nArrayList:我们可以将其看作是可以自动增长容量的动态数组,它实现了IList接口。n n(1)Capacity 集合容量,读写属性n n(2)Count 获取列表中实践包含元素的个数n n(3)Add()方法:列表末尾添加元素n n(4)Insert()方法:列表指定位置添加元素n n(5)Remove()方

9、法:移除特定对象n n(6)RemoveAt()方法:根据索引值移除对象ArrayListn n列表到数组的转换n n利用ArrayList的ToArray()前往一个数组。n n列表中对象的排序n n利用ArrayList中的Sort()方法。数据构造数据构造n n普通将数据构造分为两大类:线性数据构造和非线性数据构造。线性数据构造有线性表、栈、队列、串、数组和文件;非线性数据构造有树和图。线性表线性表线线性表的性表的逻辑逻辑构造是构造是n n个数据元素的有限序列个数据元素的有限序列: :(a1, a2 ,a3,an) (a1, a2 ,a3,an) n n为线为线性表的性表的长长度度(n0

10、)(n0),n=0n=0的表称的表称为为空表。空表。数据元素呈数据元素呈线线性关系。必存在独一的称性关系。必存在独一的称为为“第一个第一个的数据元素;必存在独一的称的数据元素;必存在独一的称为为“最后一个的最后一个的数据元素;除第一个元素外,每个元素都有且只数据元素;除第一个元素外,每个元素都有且只需一个前需一个前驱驱元素;元素; 除最后一个元素外,每个元素除最后一个元素外,每个元素都有且只需一个后都有且只需一个后继继元素。元素。一切数据元素在同一个一切数据元素在同一个线线性表中必需是一性表中必需是一样样的数的数据据类类型。型。线性表线性表n n线性表按其存储构造可分为顺序表和链表。用顺序存储

11、构造存储的线性表称为顺序表;用链式存储构造存储的线性表称为链表。n n将线性表中的数据元素依次存放在某个存储区域中,所构成的表称为顺序表。一维数组就是用顺序方式存储的线性表。链表链表n n单向链表datanextdatanextdatanextnullhead节点链表链表datanextdatanextdatanextnullhead节点插入插入datanextdatanextdatanextdatanextnullhead节点删除删除链表链表n n循环链表datanextdatanextdatanexthead节点链表链表n n双向循环链表datanextdatanextdatanexthe

12、ad节点previouspreviousprevious栈栈n n栈栈(Stack)(Stack)也是一种特殊的线性表,也是一种特殊的线性表,是一种后进先出是一种后进先出(LIFO)(LIFO)的构造。的构造。n n栈是限定仅在表尾进展插入和删栈是限定仅在表尾进展插入和删除运算的线性表,表尾称为栈顶除运算的线性表,表尾称为栈顶(top)(top),表头称为栈底,表头称为栈底(bottom)(bottom)。n n栈的物理存储可以用顺序存储构栈的物理存储可以用顺序存储构造,也可以用链式存储构造。造,也可以用链式存储构造。a1a1a2a2anan栈底栈顶出栈进栈队列队列队列队列(Queue)(Qu

13、eue)是限定一切的插入只能在表的一端进展,而是限定一切的插入只能在表的一端进展,而一切的删除都在表的另一端进展的线性表。一切的删除都在表的另一端进展的线性表。表中允许插入的一端称为队尾表中允许插入的一端称为队尾(Rear)(Rear),允许删除的一端称,允许删除的一端称为队头为队头(Front)(Front)。队列的操作是按先进先出队列的操作是按先进先出(FIFO)(FIFO)的原那么进展的。的原那么进展的。队列的物理存储可以用顺序存储构造,也可以用链式存储队列的物理存储可以用顺序存储构造,也可以用链式存储构造。构造。a1 a2 a3 ana1 a2 a3 an队头队尾出队 入队Hashta

14、blen n它表示一个键key/值value对的集合,该集合的条目是DictionaryEntry构造实例。n n构造体DictionaryEntry有一个Key和Value属性用来读取和设置键和值。n n存储的条目不能有一样的键值。键的比较是基于键的哈希码顺序进展的。我们应该为要存放到散列表的各个对象定义HashCode()和Equals()。Hashtable它实现了IDictionary接口(1)void Add(object key,object value); (2)void Remove(object key);(3)void Clear();(4)bool Contains(ob

15、ject key);(5)object this object key get; set;注:只能经过Hashtablekey来访问/设置相应value,不能经过Hashtableindex访问元素。散列表散列表散列表又称为哈希表。散列表算法的根本思想是:散列表又称为哈希表。散列表算法的根本思想是: 以结点的关键字为自变量,经过一定的函数关系散列以结点的关键字为自变量,经过一定的函数关系散列函数计算出对应的函数值,以这个值作为该结点存储在函数计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。散列表中的地址。当散列表中的元素存放太满,就必需进展再散列,将产生当散列表中的元素存放太满,就

16、必需进展再散列,将产生一个新的散列表,一切元素存放到新的散列表中,原先的一个新的散列表,一切元素存放到新的散列表中,原先的散列表将被删除。在散列表将被删除。在C#C#言语中,经过负载因子言语中,经过负载因子(load (load factor)factor)来决议何时对散列表进展再散列。例如:假设负载来决议何时对散列表进展再散列。例如:假设负载因子是因子是0.750.75,当散列表中曾经有,当散列表中曾经有75%75%的位置曾经放满,那的位置曾经放满,那么将进展再散列。么将进展再散列。负载因子越高负载因子越高( (越接近越接近1.0)1.0),内存的运用效率越高,元素的,内存的运用效率越高,元

17、素的寻觅时间越长。负载因子越低寻觅时间越长。负载因子越低( (越接近越接近0.0)0.0),元素的寻觅时,元素的寻觅时间越短,内存浪费越多。间越短,内存浪费越多。HashtableHashtable类的缺省负载因子是类的缺省负载因子是0.750.75。Hashtablen n阐明:阐明:n nHashtable存储元素时,根据对象的散列码来存储元素时,根据对象的散列码来计算它计算它n n的储位置,而散列码是利用的储位置,而散列码是利用Object类中的类中的HashCode()n n方法来获取的,该方法是利用对象在内存中方法来获取的,该方法是利用对象在内存中的地的地n n来获取散列码的。来获取散列码的。SortedListn n表示键/值对集,且条目按键排序n n可按键或按索引来访问,即它综合了ArrayList和Hashtable的功能和优点。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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