数组和集合ppt课件.ppt

上传人:本田雅阁 文档编号:3187136 上传时间:2019-07-23 格式:PPT 页数:34 大小:159.01KB
返回 下载 相关 举报
数组和集合ppt课件.ppt_第1页
第1页 / 共34页
数组和集合ppt课件.ppt_第2页
第2页 / 共34页
数组和集合ppt课件.ppt_第3页
第3页 / 共34页
数组和集合ppt课件.ppt_第4页
第4页 / 共34页
数组和集合ppt课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

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

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

2、ble IEnumerable IEnumerator,集合框架中的接口,集合框架中的接口,ICloneable:提供了创建现有对象的副本的标准方式。 interface ICloneable object Clone(); Clone()方法会返回一个与当前对象类型相同的新实例,这个返回的 对象会被初始化为与当前对象相同的内容。 1、影子复制 2、深度复制,IEnumerable可枚举接口: 如果某个类实现了IEnumerable接口,则称该类是可枚举的,可枚举类型都可以使用foreach循环来遍历集合中的每个元素。所有集合类都实现了该接口。 interface IEnumerable IE

3、numerator Getenumerator(); ,集合框架中的接口,IEnumerator枚举器接口: 它提供的方法成员用于查询可枚举集合的状态及访问集合中的元素。它给我们提供了一种通用的方式来访问集合中的元素。 interface Ienumerator Object Current get; bool MoveNext (); void Reset () ,集合框架中的接口,IEnumerator,IEnumerable,集合框架中的接口,Iterator模式在.NET类库中的实现,Reset() MoveNext() Current,GetEnumerator()方法 产生,遍历集

4、合,集合框架中的接口,Iterator模式 作用:对集合中的一系列元素进行访问。 基本思想:集合对象只负责维护集合中的各个元素,而对元素的访问则通过定义一个新的枚举器对象来进行;枚举器对象负责获取集合中的元素,并允许按照特定的顺序来遍历这些元素。,迭代器的工作原理,返回的元素,MoveNext(),MoveNext(),MoveNext(),Reset(),Current返回当前元素,集合类,C#以数组形式提供对集合的支持。但数组是定长的,如果元素会不断增长或缩减,那么数组就难当此任了。 集合类则很好地解决了这些问题。,集合框架中的接口,基本接口: ICloneable IEnumerable

5、 IEnumerator ICollection IList IDictionary 这些接口通常都是大多数集合类实现的,ICollection:所有集合的根本,为.NET框架中的所有集合类所实现。该接口定义了集合类的最低约束。 interface ICollection int Count get; void CopyTo(Array array,int index); bool IsSynchronizedget; object SynchRootget; ,集合框架中的接口,IList:实现了IList的集合提供类似于列表的语法。 interface IList int Add(obje

6、ct 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 :由支持将关键字映射到值这一操作的集合类所实现。 interface IDictionary ICollection Keys get; ICollection Values get; object this objec

7、t key get; set; void Add(object key,object value); bool Contains(object key); void Remove(object key); IDictionaryEnmerator GetEnumerator(); ,集合框架中的接口,集合框架中的实现类,ICollection,IEnumerable,ICloneable,IList,ArrayList,Hashtable,SortedList,IDictionary,集合框架中的实现类,ICollection,IEnumerable,ICloneable,IList,Stac

8、k,Queue,IDictionary,ArrayList,ArrayList:我们可以将其看作是能够自动增长容量的动态数组,它实现了IList接口。 (1)Capacity 集合容量,读写属性 (2)Count 获取列表中实际包含元素的个数 (3)Add()方法:列表末尾添加元素 (4)Insert()方法:列表指定位置添加元素 (5)Remove()方法:移除特定对象 (6)RemoveAt()方法:根据索引值移除对象,ArrayList,列表到数组的转换 利用ArrayList的ToArray()返回一个数组。 列表中对象的排序 利用ArrayList中的Sort()方法。,数据结构,一

9、般将数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构有线性表、栈、队列、串、数组和文件;非线性数据结构有树和图。,线性表,线性表的逻辑结构是n个数据元素的有限序列: (a1, a2 ,a3,an) n为线性表的长度(n0),n=0的表称为空表。 数据元素呈线性关系。必存在唯一的称为“第一个”的数据元素;必存在唯一的称为“最后一个”的数据元素;除第一个元素外,每个元素都有且只有一个前驱元素; 除最后一个元素外,每个元素都有且只有一个后继元素。 所有数据元素在同一个线性表中必须是相同的数据类型。,线性表,线性表按其存储结构可分为顺序表和链表。用顺序存储结构存储的线性表称为顺序表;用链

10、式存储结构存储的线性表称为链表。 将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表。一维数组就是用顺序方式存储的线性表。,链表,单向链表,data,next,data,next,data,nextnull,head节点,链表,data,next,data,next,data,nextnull,head节点,插入,data,next,data,next,data,next,data,nextnull,head节点,删除,链表,循环链表,data,next,data,next,data,next,head节点,链表,双向循环链表,data,next,data,next,data,

11、next,head节点,previous,previous,previous,栈,栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。 栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。 栈的物理存储可以用顺序存储结构,也可以用链式存储结构。,a1,a2,an,栈底,栈顶,出栈,进栈,队列,队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。 表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。 队列的操作是按先进先出(FIFO)的原则进行的。 队列的物理存储

12、可以用顺序存储结构,也可以用链式存储结构。,a1 a2 a3 an,队头,队尾,出队,入队,Hashtable,它表示一个键(key)/值(value)对的集合,该集合的条目是DictionaryEntry结构实例。 结构体DictionaryEntry有一个Key和Value属性用来读取和设置键和值。 存储的条目不能有相同的键值。键的比较是基于键的哈希码顺序进行的。我们应该为要存放到散列表的各个对象定义HashCode()和Equals()。,Hashtable,它实现了IDictionary接口 (1)void Add(object key,object value); (2)void R

13、emove(object key); (3)void Clear(); (4)bool Contains(object key); (5)object this object key get; set; 注:只能通过Hashtablekey来访问/设置相应value,不能通过Hashtableindex访问元素。,散列表,散列表又称为哈希表。散列表算法的基本思想是: 以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。 当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放到新的散列表中,原先的散列表将被删除

14、。在C#语言中,通过负载因子(load factor)来决定何时对散列表进行再散列。例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,那么将进行再散列。 负载因子越高(越接近1.0),内存的使用效率越高,元素的寻找时间越长。负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多。 Hashtable类的缺省负载因子是0.75。,Hashtable,说明: Hashtable存储元素时,根据对象的散列码来计算它 的储位置,而散列码是利用Object类中的HashCode() 方法来获取的,该方法是利用对象在内存中的地 来获取散列码的。,SortedList,表示键/值对集,且条目按键排序 可按键或按索引来访问,即它综合了ArrayList和Hashtable的功能和优点。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1