版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
——集合1.1系统技术栈介绍1非泛型集合泛型集合集合概述知识回顾类的继承多态抽象类和接口Sealed关键字异常命名空间和程序集学习目标通过本节学习可以:重点学习ArrayList集合重点学习Hashtable集合掌握List<T>泛型集合掌握Dictionary<TKey,TValue>泛型集合掌握自定义泛型了解集合概述01集合概述集合概述集合概述为了保存这些数目不确定的对象,C#中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,统称为集合。C#中集合可分为泛型集合和非泛型集合,二者均间接实现了IEnumerable接口。泛型集合位于System.Collections.Generic命名空间,它只能存储同一种类型的对象,其中最常用的是List<T>泛型集合和Dictionary<TKey,TValue>泛型集合。非泛型集合位于System.Collections命名空间,它可以存储多种类型的对象,其中最常用的是ArrayList集合和Hashtable集合。集合概述C#中提供了丰富的集合类。为了便于初学者对集合进行系统地学习,接下来通过一个图例来描述整个集合类的继承体系,如下图所示。上图中列出了程序中常用的一些集合类。其中,虚线框里填写的都是接口类型,而实线框里填写的都是具体的实现类。集合概述02非泛型集合思考题ArrayList集合常用方法包括哪些?Arraylist集合ArrayList集合就像是一个收纳盒,它可以容纳不同类型的对象。例如,可以将int、string、object等类型的对象同时加入到ArrayList集合中。ArrayList集合提供了一系列方法,接下来通过下表来列举ArrayList集合的常用方法。方法说明intAdd(objectvalue)将元素添加到ArrayList集合voidAddRange(ICollectionc)将集合或者数组添加到ArrayList集合voidClear()从ArrayList中移除所有元素boolContains(objectitem)判断某元素是否在ArrayList中intIndexOf(objectvalue)查找指定元素,并返回该元素在ArrayList中第一个匹配项的索引voidInsert(intindex,objectvalue)将元素插入ArrayList的指定索引处intLastIndexOf(objectvalue)查找指定元素,并返回该元素在ArrayList中最后一个匹配项的索引voidRemove(objectobj)从ArrayList中移除指定元素的第一个匹配项voidRemoveAt(intindex);从ArrayList中移除指定索引处的元素voidReverse()将整个ArrayList中元素的顺序反转voidSort()对整个ArrayList中的元素进行排序ArrayListArrayList集合ArrayList集合的常用方法可以对集合中的元素进行添加、删除、修改和查询等操作,具体如下:添加元素调用ArrayList对象的Add()方法、AddRange()方法、Insert()方法来添加元素,具体示例代码如下:ArrayListarr1=newArrayList();//创建ArrayList集合对象arr1//使用不同方法向集合添加多个元素
arr1.Add(134);arr1.AddRange(newArrayList(){"张三","李四"});arr1.Insert(2,'a');添加元素ArrayList集合需要注意的是,集合的长度就是元素的个数,集合的容量是随集合长度变化而变化的。如果集合的长度在1~4之间,容量的值就是4。如果集合的实际长度在5~8之间,那容量的值就变为8。以此类推,ArrayList的容量值总是以4为基本单位递增或递减。使用Insert()方法向集合中添加元素时,允许插入元素的索引值比集合的最大索引值大1,如果元素的索引值超过集合的最大索引值且范围在1以上,编译时就会报异常。添加元素ArrayList集合2.删除元素调用ArrayList的Remove()方法或RemoveAt()方法或Clear()方法删除元素,具体示例代码如下:ArrayListarr1=newArrayList();//将新建的集合对象添加到arr1集合的末尾
arr1.AddRange(newArrayList(){"张三","李四","王五"});arr1.Remove("张三");arr1.RemoveAt(0);arr1.Clear();删除元素从集合中移除指定元素的第一个匹配项从集合中移除指定索引位置的元素删除集合中所有的元素ArrayList集合3.修改元素通过集合中的索引修改ArrayList集合中的元素,具体示例代码如下:
//创建ArrayList集合对象
ArrayListarr1=newArrayList(newArrayList(){"张三","李四","王五"});Console.WriteLine("修改前集合中的元素:");ErgoArr(arr1);arr1[0]=1;arr1[1]=2;arr1[2]=3;Console.WriteLine();Console.WriteLine("修改后集合中的元素:");ErgoArr(arr1);Console.ReadKey();修改元素通过集合的索引修改arr1中的元素,由原来的“张三”、“李四”、“王五”改成了1、2、3ArrayList集合4.查询元素调用IndexOf()方法或LastIndexOf()方法查询指定元素的索引,调用Contains()方法判断集合中是否存在某个元素。具体示例代码如下:
ArrayListarr1=newArrayList(newArrayList(){1,2,3,1});ErgoArr(arr1);
intindex=arr1.IndexOf(1);Console.WriteLine("集合中第一个1的索引值为:"+index);
intlastIndex=arr1.LastIndexOf(1);Console.WriteLine("集合中最后一个1的索引值为:"+lastIndex);boolresult=arr1.Contains(2);//判断某元素是否在集合中Console.WriteLine("集合中是否包含元素2:"+result);arr1.Sort();//对集合中的元素按照默认的顺序进行排序ErgoArr(arr1);
查询元素查找指定元素,并返回该元素在集合中第一个匹配项的索引查找指定元素,并返回该元素在集合最后一个匹配项的索引ArrayList集合多学一招:通过foreach循环遍历ArrayList集合。具体语法格式如下:foreach(varitemincollection){
执行语句;}
上述语法格式中,item变量用于存储每次遍历的元素,默认情况下item为var类型,in为关键字,collection表示被遍历的集合。需要注意的是,foreach循环只能对遍历的元素进行读操作,而且只能单向遍历,也就是一个元素在整个foreach循环中只能被访问一次,因此在遍历集合中的元素时可以优先选择foreach循环,如果需要修改或多次访问集合中某个元素时,考虑使用for循环。多学一招思考题Hashtable集合常用方法包括哪些?hashtable集合C#中提供了一个Hashtable集合,该集合又被称为键值对集合,所谓键就类似于字典中的目录,值就类似于字典中的具体汉字信息,键与值是一一对应的关系,通过唯一的键能找到对应的值,因此Hashtable集合的这种特性大大提高了查询元素的效率。接下来通过一张表来列举Hashtable集合中的常用方法。方法说明voidAdd(objectkey,objectvalue)将带有指定键和值的元素添加到Hashtable集合中voidClear()从Hashtable集合中移除所有元素boolContains(objectkey)判断Hashtable集合中是否包含指定的键boolContainsValue(objectvalue)判断Hashtable集合是否包含指定的值voidRemove(objectkey)从Hashtable集合中移除带有指定键的元素Hashtable集合hashtable集合接下来通过一个案例来演示如何使用Hashtable集合中的常用方法,具体示例代码如下:Hashtableht=newHashtable();//创建Hashtable集合对象htht.Add(1,"张三");ht.Add('A',"李四");ht.Add("BB","王五");ErgoHash(ht);ht.Remove("BB");
ErgoHash(ht);ht.Clear();
Console.WriteLine("集合ht中的元素个数:"+ht.Count);Console.ReadKey();Hashtable集合调用Hashtable集合的Add()方法添加元素移除键为"BB"的元素移除Hashtable集合中所有元素hashtable集合在遍历Hashtable集合时,除了可以通过键来获取对应的值以外,还可以直接遍历集合中的值或集合中的对象。接下来通过一个例子来演示这两种遍历方式,具体示例代码如下:Hashtableht=newHashtable();//调用Hashtable的Add()方法来添加元素
ht.Add(1,"张三");ht.Add(2,"李四");ht.Add(3,"王五");//使用foreach语句来循环遍历集合中的值
foreach(objectvalueinht.Values){Console.WriteLine("当前遍历到的值为:"+value);}Console.WriteLine();Hashtable集合hashtable集合//使用foreach语句来循环遍历集合对象本身foreach(DictionaryEntrydicEninht){Console.Write(dicEn.Key+":"+dicEn.Value+"\n");}Console.ReadKey();运行结果如下图所示:Hashtable集合非泛型集合
publicclassstudent{publicintNumber{get;set;}publicstringName{get;set;}publicboolSex{get;set;}publicstudent(int_number,string_name,bool_sex){Number=_number;Name=_name;Sex=_sex;}publicoverridestringToString(){returnstring.Format("序号:{0},姓名:{1},性别:{2}",Number.ToString(),Name,Sex?"男":"女");}}
ArrayListarrayStudents=newArrayList();
privatevoidButton_Click(objectsender,RoutedEventArgse){addData0();showExemple0();}
privatevoidaddData0(){arrayStudents.Add(newstudent(1,"小颗豆一",true));arrayStudents.Add(newstudent(3,"小颗豆二",false));arrayStudents.Add(newstudent(5,"小颗豆三",true));arrayStudents.Add(newstudent(2,"小颗豆四",false));arrayStudents.Add(newstudent(4,"小颗豆五",true));arrayStudents.Add(newstudent(6,"小颗豆六",false));arrayStudents.Add("这里冒一个字符串,需要转换,如果这里是值类型还要进行装箱与拆箱,带来额外的开销!");}
privatevoidshowExemple0(){richTextBox1.AppendText("--------非泛型数组的操作(需要强制转换)--------\r\n");foreach(variteminarrayStudents){if(itemisstudent)richTextBox1.AppendText(item.ToString()+"\r\n");elserichTextBox1.AppendText((string)item+"\r\n");}}非泛型集合类在取出值时需要进行类型的转换操作,如果加入值类型会引起装箱和拆箱的操作,这会带来巨大的性能额外开销03泛型集合思考题List<T>泛型集合常用方法包括哪些?List<t>泛型集合List<student>listStudnets=newList<student>();
privatevoidButton_Click(objectsender,RoutedEventArgse){addData0();showExemple0();}
privatevoidaddData0(){listStudnets.Add(newstudent(1,"小颗豆一",true));listStudnets.Add(newstudent(3,"小颗豆二",false));listStudnets.Add(newstudent(5,"小颗豆三",true));listStudnets.Add(newstudent(2,"小颗豆四",false));listStudnets.Add(newstudent(4,"小颗豆五",true));listStudnets.Add(newstudent(6,"小颗豆六",false));}
privatevoidshowExemple0(){richTextBox1.AppendText("--------泛型数组的操作(不需要强制转换)--------\r\n");foreach(variteminlistStudnets){richTextBox1.AppendText(item.ToString()+"\r\n");}}List<t>泛型集合C#提供了一个List<T>泛型集合,该集合不仅具备ArrayList集合的功能,而且还可以保证List<T>集合只能添加同类型元素,不会出现类型转换的问题。接下来通过一个案例来演示泛型集合List<T>的使用,具体代码如下:namespaceProgram08{classProgram{staticvoidMain(string[]args){List<string>list=newList<string>();//创建一个List<string>泛型集合list.Add("Apple");list.Add("Banana");list.Add("Orange");……}}}List<T>泛型集合向List<string>集合中添加三个string类型元素List<t>泛型集合namespaceProgram08{classProgram{staticvoidMain(string[]args){……
//使用foreach循环遍历List<string>集合中的元素
foreach(stringiteminlist){Console.WriteLine(item+"");}Console.ReadKey();}}}List<T>泛型集合思考题Dictionary<Tkey,TValue>泛型集合常用方法包括哪些?Dictionary<tkey,tvalue>泛型集合通过前面的学习可知,Hashtable集合中的键与值在默认情况下都是object类型,这使得用户在取值时不可避免的遇到类型转换的问题。为了解决这个问题,C#中提供了泛型集合Dictionary<Tkey,TValue>,该集合中的键与值都只能是一种类型。接下来通过具体的案例来演示泛型集合Dictionary<TKey,TValue>的用法,具体代码如下所示。Dictionary<Tkey,TValue>泛型集合Dictionary<tkey,tvalue>泛型集合namespaceProgram09{classProgram{staticvoidMain(string[]args){Dictionary<int,string>dic=newDictionary<int,string>();dic.Add(1,"张三");dic.Add(2,"李四");dic.Add(3,"王五");//通过遍历集合中的键获取对应的值foreach(intkeyindic.Keys){Console.WriteLine(key+":"+dic[key]);}……}}}Dictionary<Tkey,TValue>泛型集合向Dictionary<int,string>集合中添加三个元素Dictionary<tkey,tvalue>泛型集合namespaceProgram09{classProgram{staticvoidMain(string[]args){……Console.WriteLine();dic.Remove(2);//通过遍历键值对的方式来获取键与值foreach(KeyValuePair<int,string>kvindic){Console.WriteLine(kv.Key+":"+kv.Value);}Console.WriteLine();Console.ReadKey();}}}Dictionary<Tkey,TValue>泛型集合从集合中移除指定的键与值Dictionary<tkey,tvalue>泛型集合运行结果如下图所示:需要注意的是,集合Dictionary<TKey,TValue>中的键值对类型为KeyValuePair<int,string>,通过该类型的对象就可以获取集合中的键和值。Dictionary<Tkey,TValue>泛型集合自定义泛型在程序开发中,如果泛型集合List<T>与Dictionary<TKey,TValue>都不能满足实际需求,此时还可以自定义泛型。自定义泛型可以根据用户的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度农业科技企业股权分红及转让协议3篇
- 2024音乐素材版权质押合同:视频素材制作融资
- 2025年度新能源汽车共享平台车辆挂靠管理合同3篇
- 2025年度智慧城市基础设施建设项目施工合同范本3篇
- 2025年度渔船租赁与渔业产业链整合服务合同3篇
- 2024铁路员工劳动协议样本一
- 2025年中国汽轮机行业市场供需格局及投资规划建议报告
- 2025年度个人汽车租赁合同绿色出行附加服务4篇
- 2025年度智能机器人研发与技术服务合作协议书4篇
- 2025年陕西西安人才市场有限公司招聘笔试参考题库含答案解析
- 第1本书出体旅程journeys out of the body精教版2003版
- 台资企业A股上市相关资料
- 电 梯 工 程 预 算 书
- 罗盘超高清图
- 参会嘉宾签到表
- 机械车间员工绩效考核表
- 2.48低危胸痛患者后继治疗评估流程图
- 人力资源管理之绩效考核 一、什么是绩效 所谓绩效简单的讲就是对
- 山东省医院目录
- 云南地方本科高校部分基础研究
- 废品管理流程图
评论
0/150
提交评论