CSharp_10_1_使用数组和集合.ppt_第1页
CSharp_10_1_使用数组和集合.ppt_第2页
CSharp_10_1_使用数组和集合.ppt_第3页
CSharp_10_1_使用数组和集合.ppt_第4页
CSharp_10_1_使用数组和集合.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C# .NET 程序设计,Visual c# 2010从入门到精通,第10章 使用数组和集合,声明、初始化、复制和使用数组变量 声明、初始化、复制和使用各种集合类型的变量,数组的概念,数组是一个无序的元素序列 数组中的所有元素具有相同的类型(这与类、结构不同) 一个数组中的元素存储在一个连续性的内存块中,并可使用一个整数索引来访问,声明数组,类型 变量名 Int pins; 这不像C+声明时需大小 也不像Java方括号放在变量名后 一般为数组起一个复数名词 数组是引用类型,创建数组实例,new 元素类型 大小 例:pins=new int4; 大小不一定是常量,它可在运行时计算 如: int

2、size=int.Parse(Console.Readline(); int pins=new intsize;,初始化数组,创建一个数组实例时,数组实例的所有元素都被初始化为一个默认值(0,false,null) 要修改默认值,需要在一对大括号中提供一个逗号分隔的值列表。 例: int pins=new int49,2,3,7;,初始化数组,大括号中的值不一定是常量,它们可以是在运行时计算的值。 例: Random r=new Random(); int pins=new int4 r.Next()%10,r.Next()%10,r.Next()%10,r.Next()%10,初始化数组,大

3、括号中的值的数量必须和创建的数组实例的大小完全匹配 Int pins=new int39,3,7,2/Error Int pins=new int49,3,7 /Error Int pins=new int4 9,3,7,2/correct,初始化数组,初始化数组时,实际上可省略new表达式和数组大小。 例 int pins=9,3,7,2 Time times=new Time(12,30), new Time(5,32) ,创建隐式数组,声明数组时,元素类型必须与声明的类型相一致,如int数组不能初始化double,string等类型 可否让编译器自动判断类型 var names=new

4、“My”,”Task”,”Xyz”,访问单独的数组元素,用下标索引来访问 int mypins; myPin=pins2,遍历数组,for(int i=0;i*.Length;i+) foreach(类型 变量 in 数组名) 例: foreach(int pint in pins) Console.WriteLine(pin) ,遍历数组,foreach总是遍历整个数组,不可是数组中的一部分; foreach总是从0Length-1,不可倒序 foreach不可修改数组的元素,只能遍历,复制数组,数组是引用类型,数组变量包含是对一个数组实例的引用,复制了一个数组变量后,将获得对同一个数组实例

5、的两个引用。 int pins=9,3,7,2 int alias=pins;/alias与pins引用同一个数组实例,复制数组,用for循环逐个复制(自己复制) int pins=9,3,7,2; int copy=new intpins.Length; for(int i=0;icopy.Length;i+) copyi=pinsi; ,复制数组,调用类库 System.Array类提供了CopyTo方法 int pins=9,3,7,2; int copy=new intpins.Length; pins.CopyTo(copy,0);,复制数组,调用类库 System.Array类提供

6、的静态Copy方法 int pins=9,3,7,2; int copy=new intpins.Length; Array.Copy(pins,copy,copy.Length);,复制数组,调用类库 System.Array类提供的Clone方法 int pins=9,3,7,2; int copy=(int)pins.Clone();/Clone返回的类型为Object,多维数组,类型 ,() 数组名=new 类型,() int, items=new int4,6;,多维数组,访问时下标索引用逗号分隔 items2,3=99; items2,4=items2,3; Items2,4+;,

7、使用数组发牌,CardGame,总结,声明:类型 变量名 创建数组实例:new 元素类型 大小 默认值为0,false,null或修改默认值时在一对大括号中提供一个逗号分隔的值列表 访问数组元素用下标,总结,创建隐式数组 var 名字=new “值1”,”值2”,”值3”. 遍历数组 foreach 多维数组: 类型 ,() 数组名=new 类型,(),总结,数组为引用类型,单复制为引用复制 数组复制 用for循环逐个复制 System.Array类提供了CopyTo方法 System.Array类提供的静态Copy方法,集合类,数组的欠缺 必须使用整数索引,只收集同类型的元素 数组能容纳值类

8、型,而数组本身是引用类型,内部实现需不断的装箱与拆箱操作,整形数组,对象数组内存,集合类,提出了能不能有用于数据存储和检索的专用类。这些类支持堆栈、队列、列表和哈希表。,集合类特点,集合类定义为 System.Collections 或 System.Collections.Generic 命名空间的一部分 大多数集合类都派生自 ICollection、 IComparer、 IEnumerable、 IList、 IDictionary 和 IDictionaryEnumerator 接口以及它们的等效泛型接口。 使用泛型集合类可以提供更高的类型安全性,在某些情况下还可以提供更好的性能,尤其

9、是在存储值类型时,这些优势会体现得更明显。有关更多信息。,ArrayList集合类,数组若改变大小,需先建一个数组,再复制,不能动态改变大小 数组移除一个元素时,后元素向上移动会出现最后一个元素出现2个副本 数组插入一个元素,需下移元素,腾出位置,此时最后一个元素丢失。,ArrayList集合类,使用ArrayList集合类,可解决以上问题 移除元素,ArrayList将自动重新安排其元素的顺序 Add方法在ArrayList末尾添加元素,ArrayList会自动改变自身大小 Insert方法插入一个元素, ArrayList会自动改变自身大小,ArrayList例,CSharp_10_2_A

10、rrayList,Queue集合类,队列,先进先出 FIFO 入队:Enqueue 出队:Dequeue CSharp_10_3_Queue,Stack集合类,堆栈,后进先出LIFO 入栈:push 出栈:Pop CSharp_10_4_Stack,Hashtable集合类,数组与ArrayList均用用整数索引来映射到一个元素。能否有一个非整型的映射(其他类型如String,double,Time),其它语言叫关联数组 Hashtable(哈希表)提供了这种功能。它内部维护着两个object数组,一个容纳作为映射的来源key(键),另一个容纳映射目标的Value(值)。,Hashtable集合类,注意 Hashtable不以包含重复的key。用Add方法添加一个已有的key,会抛出异常 在内部,Hashtable是一个稀疏数据结构 使用foreach语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论