版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-2-23常熟理工计算机科学与工程学院1面向对象程序设计基于.NET平台集合Collection2022-2-23常熟理工计算机学院 杨剑勇2数组的局限性 我们学习的数组是一组具有相同名称和类型的变量集合,但是数组初始化后就不能再改变其大小,不能实现在程序中动态添加和删除数组元素,使数组的使用具有很多局限性。 集合能解决数组存在的这个问题,下面来学习介绍集合的相关内容2022-2-23常熟理工计算机学院 杨剑勇3本章内容目录1、集合的概述2、Array3、动态数组ArrayList4、BitArray5、Stack类6、Queue7、HashTable类8、SortedList2022
2、-2-23常熟理工计算机学院 杨剑勇4集合的概念集合的概念 集合就如同数组,用来存储和管理一组具有相同性质的对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。集合是一个特殊的类,好比容器一样将一系列相似的项组合在一起,集合中包含的对象称为集合元素。集合可分为泛型集合类和非泛型集合类。2022-2-23常熟理工计算机学院 杨剑勇5.NET的非泛型集合类编编号号类类实现实现描述描述1ArrayListArrayListIList IList 可以伸缩的数组可以伸缩的数组2BitArrayBitArrayICollectio
3、nICollection高效利用内存的布尔数组高效利用内存的布尔数组3StackStackICollectionICollection后入先出集合后入先出集合4QueueQueueICollectionICollection先入先出集合先入先出集合5HashTableHashTableIDicionaryIDicionary无序的键无序的键/ /值对集合值对集合6SortedListSortedListIDicionaryIDicionary泛型的泛型的HashTableHashTable,按键排序,按键排序 2022-2-23常熟理工计算机学院 杨剑勇6集合的接口编编号号接口接口描述描述1I
4、List有序的集合,可以像数组一样操作,具有索引器、用有序的集合,可以像数组一样操作,具有索引器、用intint索引访问索引访问数组元素,还具备搜索和修改集合的方法。数组元素,还具备搜索和修改集合的方法。2ICollection继承继承IListIList和和IDictionaryIDictionary接口的接口,包含接口的接口,包含CountCount属性,确定集合属性,确定集合的长度,具备的长度,具备CopyToCopyTo方法,将集合的内容复制到传统数组中。方法,将集合的内容复制到传统数组中。3IEnumerable可以枚举的对象,这个接口只有一个可以枚举的对象,这个接口只有一个GetE
5、numeratorGetEnumerator方法,返方法,返回回EnumeratorEnumerator对象。对象。ICollectionICollection实现实现IEnumerableIEnumerable,因此所有,因此所有集合类都直接或者间接的实现集合类都直接或者间接的实现EnumerableEnumerable4IDictionary数组集合,用任意的数组集合,用任意的“键键”对象索引。具有索引器,用对象索引。具有索引器,用ObjectObject索索引访问元素,具备修改集合的方法。引访问元素,具备修改集合的方法。2022-2-23常熟理工计算机学院 杨剑勇7.NET的泛型集合类编
6、编号号类类实现实现描述描述1ListListIList IList 可以伸缩的数组可以伸缩的数组2ListedListListedListICollectionICollection泛型泛型ArrayListArrayList3StackStackICollectionICollection泛型栈泛型栈4QueueQueueICollectionICollection泛型队列泛型队列5DicDict tionaryionaryIDicIDict tionaryionary无序的键无序的键/ /值对集合值对集合6SortedListSortedListIDicIDict tionaryionar
7、y泛型的泛型的SortedList SortedList 7SortedDicionarySortedDicionaryIDicIDict tionaryionary字典,按二叉树中的键排序数据字典,按二叉树中的键排序数据2022-2-23常熟理工计算机学院 杨剑勇8集合【ArrayList】 ArrayList是System.Collections命名空间中的类,类似于数组,有人称其为动态数组。 其容量可以根据需要自动扩充,元素的索引也可根据元素数量重新分配,可以动态实现元素的添加、删除等操作。下表列出了ArrayList类的几个常用属性属性名称属性名称属性说明属性说明Capacity获取或
8、设置 ArrayList 可包含的元素数,默认为4。Count 获取获取 ArrayList 中实际包含的元素数。中实际包含的元素数。Item 获取或设置指定索引处的元素。获取或设置指定索引处的元素。2022-2-23常熟理工计算机学院 杨剑勇9集合【ArrayList】方法名称方法说明Add 将元素添加到 ArrayList 的结尾处。AddRange 在ArrayList 的末尾增加一定范围内的元素。Clear 清除ArrayList 中所有元素。Contains 检查某元素是否在 ArrayList 中。IndexOf 返回 ArrayList 中某个元素值的第一个匹配项对应的索引。In
9、sert 将元素插入 ArrayList 的指定索引处。Remove 从 ArrayList 中移除特定元素的第一个匹配项。Reverse 将 ArrayList 或它的一部分中元素的顺序反转。Sort 对 ArrayList 或它的一部分中的元素进行排序。2022-2-23常熟理工计算机学院 杨剑勇10 集合【ArrayList】_创建函数为了创建ArrayList,可以使用三种重载构造函数中的一种,还可以使用ArrayList的静态方法Repeat创建一个新的ArrayList。这三个构造函数的声明如下。1、使用默认的初始容量创建ArrayList,该实例并没有任何元素。格式如下:publ
10、ic ArrayList()2、使用实现了ICollection接口的集合类来初始化新创建的ArrayList。格式如下:public ArrayList(ICollection c)3、指定一个整数值来初始化ArrayList的容量,创建ArrayList。格式如下:public ArrayList(int capacity)2022-2-23常熟理工计算机学院 杨剑勇11ArrayListArrayList的四种创建方法举例如下:的四种创建方法举例如下:/1./1.使用默认的初始容量创建使用默认的初始容量创建ArrayListArrayList,该实例并没有任何元素,该实例并没有任何元素A
11、rrayList al1 = new ArrayList(); ArrayList al1 = new ArrayList(); /创建一个创建一个ArrayListArrayList对象对象al1al1/使用实现了使用实现了ICollectionICollection接口的集合类来初始化新创建的接口的集合类来初始化新创建的ArrayList, ArrayList, 该实例与参数该实例与参数中的集合具有相同的初始容量中的集合具有相同的初始容量ArrayList al2 = new ArrayList(al1); ArrayList al2 = new ArrayList(al1); /3./3
12、.经由指定一个整数值来初始化经由指定一个整数值来初始化ArrayListArrayList的容量的容量 ArrayList al3 = new ArrayList(18);ArrayList al3 = new ArrayList(18);/4./4.将指定将指定abcabc字符串重复字符串重复3 3次构造数组次构造数组ArrayList al4 = ArrayList.Repeat(“abc”, 3);ArrayList al4 = ArrayList.Repeat(“abc”, 3); 集合【ArrayList】_创建函数实例2022-2-23常熟理工计算机学院 杨剑勇12集合【Array
13、List】_添加元素的方法Add创建好创建好ArrayListArrayList后,有两种方法可向后,有两种方法可向ArrayListArrayList末尾中添加元素。末尾中添加元素。(1 1)AddAdd方法将单个元素添加到列表的尾部;方法将单个元素添加到列表的尾部; AddRange AddRange方法获取一个实现方法获取一个实现ICollectionICollection接口的集合实例,例如接口的集合实例,例如ArrayArray、QueueQueue、StackStack等,并将这个集合实例按顺序添加到列表的尾部等,并将这个集合实例按顺序添加到列表的尾部。ArrayList al =
14、 new ArrayList(20); ArrayList al = new ArrayList(20); /声明一个接受声明一个接受2020个元素的个元素的ArrayListArrayListal.Add(“al.Add(“我是元素我是元素1”); 1”); /使用使用ArrayListArrayList的的AddAdd方法添加集合元素方法添加集合元素al.Add(“al.Add(“我是元素我是元素2”);2”);/使用使用ArrayListArrayList的的AddAdd方法添加集合元素方法添加集合元素al.Add(“al.Add(“我是元素我是元素3”);3”);/使用使用ArrayL
15、istArrayList的的AddAdd方法添加集合元素方法添加集合元素string strs = ”string strs = ”我是元素我是元素4”4”,“我是元素我是元素5”, “5”, “我是元素我是元素6” ;6” ;/定义一个有三定义一个有三个元素的字符串数组个元素的字符串数组al.AddRange(strs); al.AddRange(strs); /使用使用AddRangeAddRange方法按集合参数中元素的顺序添加方法按集合参数中元素的顺序添加2022-2-23常熟理工计算机学院 杨剑勇13使用使用InsertInsert和和InsertRangeInsertRange方法
16、向方法向ArrayListArrayList中指定的位置插入元素:中指定的位置插入元素:InsertInsert方法添加单个元素到指定的索引位置;方法添加单个元素到指定的索引位置;InsertRangeInsertRange从指定的位置开始添加一个实现了从指定的位置开始添加一个实现了ICollectionICollection接口的实例接口的实例。ArrayList al = new ArrayList(20); ArrayList al = new ArrayList(20); /声明一个接受声明一个接受2020个元素的个元素的ArrayListArrayListal.Add(“al.Add
17、(“我是元素我是元素1”); al.Add(“1”); al.Add(“我是元素我是元素2”);al.Add(“2”);al.Add(“我是元素我是元素3”);3”);string strs = ”string strs = ”我是元素我是元素4”4”,“我是元素我是元素5”, “5”, “我是元素我是元素6” ;6” ;al.AddRange(strs); al.AddRange(strs); /使用使用AddRangeAddRange方法按集合参数中元素的顺序添加方法按集合参数中元素的顺序添加al.Insert(0,”al.Insert(0,”新增第新增第1 1个元素个元素”) )Arra
18、yList list2=newArrayList(); ArrayList list2=newArrayList(); list2.Add(“list2.Add(“我是新增元素我是新增元素1”);list2.Add(“1”);list2.Add(“我是新增元素我是新增元素2”);2”);al.InsertRange(2,list2);al.InsertRange(2,list2);/将将list2list2中的两个元素插入到中的两个元素插入到alal中的索引为中的索引为2 2的位置。的位置。集合【集合【ArrayListArrayList】_ _添加元素的方法添加元素的方法InsertInse
19、rt2022-2-23常熟理工计算机学院 杨剑勇14集合【集合【ArrayListArrayList】_ _删除ArrayList中的元素ArrayListArrayList提供了三种方法将指定元素从集合中移除,这三种方法是提供了三种方法将指定元素从集合中移除,这三种方法是RemoveRemove、RemoveAtRemoveAt和和RemoveRangeRemoveRange方法。方法。ArrayList al = new ArrayList(20); al.AddRange(new string6 “ArrayList al = new ArrayList(20); al.AddRange
20、(new string6 “元素元素1”, “1”, “元素元素2”, “2”, “元素元素3”, “3”, “元元素素4”, “4”, “元素元素5”,”5”,”元素元素6” );6” );/添加元素添加元素al.Remove(“al.Remove(“元素元素2”); 2”); /调用调用RemoveRemove方法删除元素方法删除元素, , 从从ArrayListArrayList中移除特定对中移除特定对象的第一个匹配项象的第一个匹配项, ,al.RemoveAt(2);al.RemoveAt(2);/调用调用RemoveAtRemoveAt方法删除指定索引位置元素方法删除指定索引位置元素
21、al.RemoveRange(3, 2);al.RemoveRange(3, 2);/调用调用RemoveRangeRemoveRange方法删除指定范围的元素方法删除指定范围的元素al.Clear();al.Clear();/清除所有元素清除所有元素2022-2-23常熟理工计算机学院 杨剑勇15可使用可使用SortSort方法对方法对ArrayListArrayList集合中的元素进行排序。集合中的元素进行排序。SortSort有三种重载方法。有三种重载方法。使用集合元素的比较方式进行排序:使用集合元素的比较方式进行排序:public virtual void Sort();public
22、virtual void Sort();使用自定义比较器进行排序:使用自定义比较器进行排序:public virtual void Sort(IComparer comparer);public virtual void Sort(IComparer comparer);使用自定义比较器进行指定范围的排序:使用自定义比较器进行指定范围的排序:public virtual void Sort(int index, int public virtual void Sort(int index, int count, IComparer comparer)count, IComparer compa
23、rer)例如使用集合元素的比较方式进行排序的代码如下:例如使用集合元素的比较方式进行排序的代码如下:ArrayList al = new ArrayList();ArrayList al = new ArrayList();/声明一个声明一个ArrayListArrayList对象对象al.AddRange(new string8 “Array1”, “Array2”, “Array6”, al.AddRange(new string8 “Array1”, “Array2”, “Array6”, “Array5”, “Array4” );“Array5”, “Array4” );/添加元素添加
24、元素al.Sort();al.Sort();/对对ArrayListArrayList集合中的元素进行排序集合中的元素进行排序 集合【集合【ArrayListArrayList】_ _排序2022-2-23常熟理工计算机学院 杨剑勇16为了在数组列表中查找元素,最常使用的是IndexOf或LastIndexOf方法,另外,还可以使用BinarySearch方法执行搜索。IndexOf方法从前向后搜索指定的字符串,如果找到,返回匹配的第一项的自0开始的索引,否则,返回-1。LastIndexOf方法从后向前搜索指定的字符串,如果找到,返回匹配的最后一项的自0开始的索引,否则,返回-1。这两个方法
25、各自都有三个重载版本,表示从指定的索引处开始搜索或者是从指定索引处搜索指定长度的字符串。集合【集合【ArrayListArrayList】_ _查找2022-2-23常熟理工计算机学院 杨剑勇17ArrayListArrayList内部维护着一个数组,可以通过下标进行访问,而且内部维护着一个数组,可以通过下标进行访问,而且ArrayListArrayList实现了实现了IEnumerableIEnumerable接口,因此,要遍历集合,可以使用接口,因此,要遍历集合,可以使用forfor或或foreachforeach方法。方法。下面的代码示例演示了如何使用下面的代码示例演示了如何使用forf
26、or和和foreachforeach进行集合元素遍历。进行集合元素遍历。ArrayList al = new ArrayList(new string6 ArrayList al = new ArrayList(new string6 “元素元素1”,“1”,“元素元素2”,“2”,“元素元素3”,“3”,“元素元素4”,“4”,“元素元素5” );5” );for (int i = 0; i = al.Count - 1; i+)for (int i = 0; i = al.Count - 1; i+)/使用使用forfor遍历遍历ArrayListArrayListConsole.Writ
27、e(ali);Console.Write(ali);/输出输出ArrayListArrayList中的每个元素中的每个元素 foreach (object s in al)foreach (object s in al)/使用使用foreachforeach遍历遍历Console.Write(s);Console.Write(s);/输出输出ArrayListArrayList中的每个元素中的每个元素集合【集合【ArrayListArrayList】_ _遍历2022-2-23常熟理工计算机学院 杨剑勇18private static readonly string colors = MAGE
28、NTA, RED, WHITE, BLUE, CYAN ;private static readonly string removeColors = RED, WHITE, BLUE ;public static void Main( string args ) ArrayList list = new ArrayList( 1 ); foreach ( var color in colors ) list.Add( color ); ArrayList removeList = new ArrayList( removeColors ); Console.WriteLine( ArrayLi
29、st: ); DisplayInformation( list ); RemoveColors( list, removeList ); Console.WriteLine( nArrayList after calling RemoveColors: ); DisplayInformation( list ); 集合【集合【ArrayListArrayList】_ _综合运用2022-2-23常熟理工计算机学院 杨剑勇19private static void DisplayInformation( ArrayList arrayList ) foreach ( var element in
30、 arrayList ) Console.Write( 0 , element ); Console.WriteLine( nSize = 0; Capacity = 1, arrayList.Count, arrayList.Capacity ); int index = arrayList.IndexOf( BLUE ); if ( index != -1 ) Console.WriteLine( The array list contains BLUE at index 0., index ); else Console.WriteLine( The array list does no
31、t contain BLUE. ); private static void RemoveColors( ArrayList firstList, ArrayList secondList ) for ( int count = 0; count secondList.Count; count+ ) firstList.Remove( secondList count ); 集合【集合【ArrayListArrayList】_ _综合运用2022-2-23常熟理工计算机学院 杨剑勇20利用ArrayList编写一个管理客户地址薄的应用程序,用来管理客户的地址信息。2022-2-23常熟理工计算
32、机学院 杨剑勇21集合【BitArray】2022-2-23常熟理工计算机学院 杨剑勇22集合【HashTable】_介绍在ArrayList集合中,可以使用索引访问元素,如果不能确切知道索引的值,访问就比较困难。HashTable称为哈希表,和ArrayList不同它利用键/值来存储数据,在哈希表中,每个元素都是一个键/值对,并且是一一对应的,通过“键”就可以得到“值”。如果存储电话号码,通常是姓名和电话号码存在一起,存储时把姓名当作键,号码作为值,通过姓名即可查到电话号码,这就是一个典型的哈希表存储方式。2022-2-23常熟理工计算机学院 杨剑勇23在HashTable内部维护着一个哈希
33、表。内部哈希表为插入到其中HashTable的每个键进行哈希编码,在后续的检索操作中,通过哈希编码代码,可以遍历所有元素。这种方法为检索搜寻操作提供了较佳的性能。在.NET中,键和值可以是任何对象,例如字符串、自定义类等。在后台,当插入键值对到HashTable中时,HashTable使用每个键所引用对象的GetHashCode()方法,获取一个哈希编码,存入HashTable中。集合【HashTable】_使用2022-2-23常熟理工计算机学院 杨剑勇24属性名称属性说明Count获取包含在Hashtable中的键/值对的数目Keys获取包含Hashtable中的所有键的集合Values获取包含Hashtable中的所有值的集合方法名称方法说明Add 将带有指定键和值的元素添加到Hashtable中。Clear从Hash
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽滁州市琅琊区区属国有企业招聘拟聘用人员笔试历年参考题库附带答案详解
- 中暑患者的呼吸道管理护理
- 护理工作与社会政策的制定
- 护理正能量心理支持
- 2026年老房屋改造设计说明
- 2026年秋天主题活动方案 活动总目标
- 护理综合实训课程目标
- 2026年学校应急救护培训计划书
- 2026年科技产业园设计理念
- 2026年毕业纪念品设计 创意方案
- 中华人民共和国生态环境法典知识测试题库及参考答案
- 临床科室绩效核算分配方案
- 2026年形势与政策习题题库试题附答案详解(考试直接用)
- TCSAE《电动汽车驱动电机轴承电腐蚀试验及评价方法》
- 心血管内科护理常考试试题(附答案)
- 罪犯入监教育工作制度
- 逐一整改销号工作制度
- 2026年老年养生保健知识课件
- 2026年大学生英语六级考试必背全部词汇表汇编(包过版)
- 口腔门诊护士培训制度
- SJG 57-2019深圳市道路声屏障设计指引
评论
0/150
提交评论