集合和泛型精选
- 格式:ppt
- 大小:4.98 MB
- 文档页数:5
C#中的泛型和泛型集合⼀、什么是泛型?泛型是C#语⾔和公共语⾔运⾏库(CLR)中的⼀个新功能,它将类型参数的概念引⼊.NET Framework。
类型参数使得设计某些类和⽅法成为可能,例如,通过使⽤泛型类型参数T,可以⼤⼤简化类型之间的强制转换或装箱操作的过程(下⼀篇将说明如何解决装箱、拆箱问题)。
说⽩了,泛型就是通过参数化类型来实现在同⼀份代码上操作多种数据类型,利⽤“参数化类型”将类型抽象化,从⽽实现灵活的复⽤。
使⽤泛型给代码带来的5点好处:1、可以做⼤限度的重⽤代码、保护类型的安全以及提⾼性能。
2、可以创建集合类。
3、可以创建⾃⼰的泛型接⼝、泛型⽅法、泛型类、泛型事件和泛型委托。
4、可以对泛型类进⾏约束,以访问特定数据类型的⽅法。
5、关于泛型数据类型中使⽤的类型的信息,可在运⾏时通过反射获取。
例⼦:using System;namespace ConsoleApp{class Program{class Test<T>{public T obj;public Test(T obj){this.obj = obj;}}static void Main(string[] args){int obj1 = 2;var test = new Test<int>(obj1);Console.WriteLine("int:" + test.obj);string obj2 = "hello world";var test1 = new Test<string>(obj2);Console.WriteLine("String:" + test1.obj);Console.ReadKey();}}} 输出结果是: int:2 String:hello world 分析: 1、 Test是⼀个泛型类。
∙使用Hashtable集合对象存储电脑信息∙员工数据输入第一部分练习1:使用Hashtable对象存储数据项问题编写一个电脑信息类:包括电脑的型号、价格和出厂日期。
程序应根据用户输入的型号来显示相应的电脑信息。
要求使用Hashtable对象存储电脑信息,并且按照型号排列输出,可以输入一个型号,程序检查判断集合中是否存在该型号的电脑,如果存在则显示具体信息。
分析指导教师分析解题思路可以创建一个包含电脑型号、价格和出厂日期的类Computer,电脑的详细信息再作为一个元素存在Hashtable集合中排列输出可以通过下面这种方式输出:(1)创建一个基于控制台的C#应用程序,命名为“HashtableExm”。
(2)创建Computer类。
(3)完整的代码如下:(4)通过从菜单中选择“生成”→“生成解决方案”,来生成该解决方案。
(5)通过从菜单中选择“调试”→“开始执行(不调试)”选项来执行此应用程序。
程序运行效果图指导教师检查学生进度练习2:员工数据输入问题在一个公司的员工管理系统中,通常会通过窗体输入员工的信息,包括员工的编号,姓名,部门,工资等情况。
现不使用数据库技术,使用SortedLis t来存储不同员工的信息,并且,录入的员工都显示在一个列表框中,还可以删除列表框中的员工,但是同时要删除SortedList对象中的员工,因此SortedLis t对象中的数据要与类表框的数据同步。
界面要求如图:员工信息输入在左边的文本框中输入数据以后,单击“添加”按钮可以把数据添加到SortedList对象中,同时姓名添加到右边列表框中;在右边的列表框中选择一个姓名信息,单击下方的“删除”按钮,可以把该员工删除,同时,SortedList对象中的员工信息也被删除。
推荐步骤:(1)先创建一个员工类Employee来保存员工属性。
(2)创建一个窗体,对照界面,添加相应的控件及其事件。
(3)窗体类完整的代码如下:(4)生成和执行此应用程序,效果如下图所示:程序运行结果图。
Map接⼝下的集合和泛型理解⼀、Map接⼝1、 Map接⼝就是最顶层了,上⾯没有继承了。
Map是⼀个容器接⼝,它与前⾯学的List.Set容器不同的是前⾯学的这些容器,⼀次只能传⼊⼀个元素,但是Map容器⼀次可以传⼊⼀对元素(键值对),这个键值对是封装在entry对象内部的,⼀个entry对象就是⼀个键值对。
Map容器的特点:键是不能重复的,值是可以重复的,并且⼀个键只能对应⼀个值。
Set 容器也是⽆序不可重复的,Map接⼝和Collection接⼝是两个并列的没有任何关系的集合(都是接⼝) Map接⼝下⾯有HashMap集合、TreeMap集合、Hashtable集合;Hashtable集合下⾯有properties集合。
⼆、HashMap集合1、HashMap是⽆序的,不可重复的(判断重复的标准是键值对的键不能重复,也是通过HashCode⽅法和equals⽅法来判断的), HashMap的底层也是数组加链表实现的(HashSet底层也都是数组加链表的结构实现的),HashMap可以⽤null作为键和值,并且是线程不安全的HashMap构造⽅法:HashMap() 创建⼀个HashMap对象HashMap(Map m) 创建⼀个键值对与m相同的HashMap集合2、HashMap常⽤⽅法V put(K key, V value) 添加/修改指定的映射返回的是:被替换的值boolean containsKey(Object key) 判断map容器是否包含指定的键boolean containsValue(Object value) 判断map容器是否包含指定的值V get(Object key) 根据指定的键获取指定的值void putAll(Map m) 把m集合中所有的元素,添加到当前map容器中V remove(Object key) 根据指定的键删除对应的映射int size() 获取map容器中元素的个数void clear() 移除所有映射关系。
集合类和泛型⼀、集合类集合类和数组同是容器,有何不同?1.数组的长度是固定的,集合类的长度不固定2.数组存储基本类型,集合类存储对象,集合中不能存基本数据类型。
集合容器因为内部数据结构不同,有多种具体容器。
不断向上抽取,就形成了集合框架。
框架的顶层为Collection接⼝。
(⼀)LIst有序的Collection,此处有序是指数据存⼊的顺序。
特点:1.有序,存⼊和取出的顺序⼀致2.所有元素有⾓标(素引)LIst常见的特有⽅法有⼀个共同的特点,就是可以操作⾓标。
List list=new ArrayList();list.add("a1");list.add("a2");Iterator it=list.Iterator();while(it.hasNext()){Object obj=it.Next();if (obj.equals("a2")){list.add("a3");}}上述代码在执⾏时是错误的,因为List类的迭代器在使⽤时容器长度是固定的,不能在迭代时修改容器的长度。
要修改上述错误,我们不能在迭代时修改容器的长度,但是我们可以修改迭代器的长度。
可以使⽤Iterator接⼝的⼦接⼝ListIterator来实现。
代码如下:List list=new ArrayList();list.add("a1");list.add("a2");Iterator it=list.listIterator(); //使⽤列表迭代器while(it.hasNext()){Object obj=it.Next();if (obj.equals("a2")){it.add("a3"); //使⽤迭代器的插⼊⽅法}}List接⼝的有三种:(⼀般除了Vector外,都是不同步的。