11-泛型集合
- 格式:ppt
- 大小:1.17 MB
- 文档页数:35
泛型在集合中的作用泛型是Java中一种重要的特性,它在集合中起着重要的作用。
本文将探讨泛型在集合中的作用和优势,并介绍一些常见的泛型用法。
一、泛型的作用泛型的作用是为了在编译时期提供类型安全检查,并减少类型转换的错误。
在集合中,泛型可以帮助我们在编译时期捕获一些类型错误,避免在运行时期出现ClassCastException等异常。
二、泛型的优势使用泛型的主要优势是增加了代码的可读性和可维护性。
通过指定集合中元素的类型,我们可以清晰地知道集合中存储的是什么类型的对象,从而更好地理解代码的含义。
此外,泛型还能提供编译时期的类型检查,避免了一些潜在的错误。
三、泛型用法1. 声明泛型集合在声明集合变量时,可以使用泛型来指定集合中元素的类型。
例如,可以声明一个ArrayList来存储整数类型的元素:```javaArrayList<Integer> list = new ArrayList<>();```这样,我们就可以确保list集合中只能存储整数类型的对象,如果尝试存储其他类型的对象,编译器会报错。
2. 使用通配符通配符是一种特殊的泛型类型,用来表示未知的类型。
在一些情况下,我们可能需要操作集合中的元素,但对其类型并不关心,这时可以使用通配符来表示未知类型。
例如,我们可以定义一个方法,接受任意类型的集合作为参数:```javapublic void printList(List<?> list) {for (Object obj : list) {System.out.println(obj);}}```在这个方法中,我们使用了通配符"?"来表示未知类型,这样就可以接受任意类型的集合作为参数。
在方法内部,我们可以通过Object 类来操作集合中的元素。
3. 泛型类和泛型方法除了在集合中使用泛型,我们还可以定义泛型类和泛型方法。
泛型类是指具有泛型类型参数的类,可以在类中使用这个类型参数。
C#2010 泛型集合
泛型集合是System.Collections.Generic命名空间提供的各种成员类实现的集合。
在学习泛型集合时,需要首先了解集合的基本接口,以及System.Collections.Generic 命名空间中包含的集合类型、公共属性和公共方法。
1.泛型集合的类型
在传统的集合中,包含的集合大多只能存储固定数据类型的数据,其主要包括ArrayList、Stack、Queue、Hashtable、BitArray、SortedList以及Dictionary等7种集合。
泛型集合对以上7种集合进行了发展,其主要包括以下几种集合,如表5-1所示。
表5-1 泛型集合的类型
2.泛型集合的分类
在上一小节中介绍了泛型集合的所有类型,其包括了13种集合。
根据这些集合的功能,可以将其分为三大类,如下所示。
●普通集合
普通集合主要用于存储非指定顺序数据的集合,其包括绝大多数集合种类,例如Dictionary、HashSet、KeyedByTypeCollection、LinkedList、List、Queue和Stack 等集合。
●有序集合
有序集合是指根据特殊的顺序进行排序存储的集合,其主要包括SortedDictionary、SortedList和SortedSet等三种集合。
●线程安全集合
线程安全集合的特点是允许开发者在这些集合中安全高效地添加或移除项,而无需在代码中实现同步,其主要包括SynchronizedCollection、SynchronizedKeyedCollection和SynchronizedReadOnlyCollection等三种集合。
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是⼀个泛型类。
泛型集合方法
嘿,朋友们!今天咱来聊聊“泛型”“集合”还有“方法”这些超厉害的东西!
就比如说泛型吧,你可以把它想象成一个超级灵活的盒子!哇塞,啥都能往里装!比如说,你要创建一个可以放各种不同类型东西的容器,这时候泛型就派上大用场啦!“为啥不直接指定类型呢?”你可能会问。
嘿嘿,那可不一样哦!就好比你有个盒子,今天你可能想装苹果,明天也许就想装橙子啦,泛型就让你的代码变得像孙悟空一样神通广大,能应对各种不同的情况!
再来说说集合。
集合就像是一个大部队,里面有好多好多成员呢!想象一下,你有一堆玩具,把它们放在一个箱子里,这箱子就是集合呀!可以轻松地对这些成员进行各种操作,增删改查,易如反掌!比如你有一群朋友的名单,你就可以用集合来管理他们,多方便!
还有方法呢,方法就像是一个个小魔法!当你需要做一件事情的时候,就调用对应的方法。
好比你饿了,就调用“做饭”这个方法,嘿,马上就能有吃的啦!
有一次,我和小伙伴在写代码的时候,就为了用泛型还是不用泛型争论起来。
我就觉得泛型简直太棒了,那么灵活,以后修改也方便呀!他还不太理解,我就给他详细解释,最后他恍然大悟!“原来泛型这么好啊!”他惊叹道。
总之,泛型、集合和方法,它们就像是代码世界里的黄金搭档,相互配合,让我们的编程之路变得更加精彩!它们能让我们的代码更简洁、更强大、更高效!这难道还不让人兴奋吗?所以呀,大家一定要好好掌握它们,让它们为我们的代码增光添彩!。
Java集合:Collection、List、Set、Map、泛型0.集合的学习思路层⾯1:应⽤层⾯ √可以掌握重点的集合类的使⽤步骤层⾯2:理解层⾯【⾯试前掌握】理解ArrayList的源码理解HashMap的源码掌握:Collection和Map的对⽐List和Set的对⽐ArrayList和Vector的对⽐ArrayList和LinkedList的对⽐HashMap和Hashtable的对⽐Collections和Collection的对⽐⼀、集合的理解和好处1.理解集合:就是⼀种容器,都是⽤于保存⼀组元素2.集合和数组的对⽐:数组的不⾜:数组的长度必须提前指定,⽽且⼀旦指定不能更改数组只能保存相同类型的元素集合:集合在使⽤时,长度不⽤指定,⽽且可以实现⾃动扩容或截断集合没有指定泛型之前,默认保存的是任意类型的元素(Object类型)指定泛型之后,可以保存对应类型的元素⽰例代码:// 使⽤数组--------------------Animal[] animals = new Animal[3];animals[0] = new Animal();animals[1] = new Animal();animals[2] = new Animal();Animal[] newAni = new Animal[animals.length+1];//复制数组//添加新元素animals=newAni;// 使⽤集合--------------------List list= new ArrayList();list.add(new Animal());①创建时如果不指定容量初始值,Hashtable 默认的初始⼤⼩为11,之后每次扩充,容量变为原来的2n+1。
HashMap 默认的初始化⼤⼩为16。
之后每次扩充,容量变为原来的2倍。
②创建时如果给定了容量初始值,那么 Hashtable 会直接使⽤你给定的⼤⼩,⽽ HashMap 会将其扩充为2的幂次⽅⼤⼩(HashMap 中的tableSizeFor()⽅法保证,下⾯给出了源代码)。
C#⾮泛型集合和泛型集合的超级详解C# 泛型集合之⾮泛型集合类与泛型集合类的对应:ArrayList对应ListHashTable对应DictionaryQueue对应QueueStack对应StackSortedList对应SortedList第⼀: ArrayList(⾮泛型集合) 与List(泛型集合)ArrayList 是数组的复杂版本。
ArrayList 类提供在⼤多数 Collections 类中提供但不在 Array 类中提供的⼀些功能:1.Array 的容量是固定的,⽽ ArrayList 的容量是根据需要⾃动扩展的。
2.ArrayList 提供添加、插⼊或移除某⼀范围元素的⽅法。
在 Array 中,您只能⼀次获取或设置⼀个元素的值。
3.使⽤ Synchronized ⽅法可以很容易地创建 ArrayList 的同步版本。
⽽ Array 将⼀直保持它直到⽤户实现同步为⽌。
4.ArrayList 提供将只读和固定⼤⼩包装返回到集合的⽅法。
⽽ Array 不提供。
5.Array 提供 ArrayList 所不具有的某些灵活性:a.可以设置 Array 的下限,但 ArrayList 的下限始终为零。
b.Array 可以具有多个维度,⽽ ArrayList 始终只是⼀维的。
c.特定类型(不包括 Object)的 Array 的性能⽐ ArrayList 好,这是因为 ArrayList 的元素属于 Object 类型,所以在存储或检索值类型时通常发⽣装箱和取消装箱。
d.要求⼀个数组的⼤多数情况也可以代之以使⽤ ArrayList。
它更易于使⽤,并且通常具有与 Object 类型的数组类似的性能。
6.Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中。
ArrayList类对象⽅法:1:Add()向数组中添加⼀个元素,2:Remove()删除数组中的⼀个元素3:(int i)删除数组中索引值为i的元素4:Reverse()反转数组的元素5:Sort()以从⼩到⼤的顺序排列数组的元素6:Clone()复制⼀个数组⼀:ArrayList:ArrayList可以不⽤指定维数可动态赋值赋不同类型值ArrayList arrayList1 = new ArrayList();arrayList1.arrayList1.Add("a");arrayList1.Add(1);arrayList1.Add("b");Response.Write(arrayList1[1]);⼆:Array:Array的容量是固定的先指定⼤⼩在赋值Array arrayList2 = Array.CreateInstance(typeof(string), 6);arrayList2.SetValue("a", 0);arrayList2.SetValue("b", 1);Response.Write(arrayList2.GetValue(1));List泛型集合:泛型集合List<T> 泛型最重要的应⽤就是集合操作,使⽤泛型集合可以提⾼代码重⽤性,类型安全和更佳的性能。
集合框架之泛型详解泛型(Generics)什么是泛型?泛型是在jdk1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制。
泛型格式:通过<>来定义要操作的引用数据类型。
例如以下的例子:import java.util.*;class GenericsDemo{public static void main(String[] args){ArrayList<String> list=new ArrayList<String>();list.add("zhangsan");list.add("lisi");list.add("huangsan");//list.add(new Integer(3));//会出编译时错误for(Iterator<String> it=list.iterator();it.hasNext();){String s=it.next();System.out.println(s);}}}我们可以看到使用泛型有很多好处。
a)将运行时期出现问题ClassCastException,转移到了编译时期。
方便程序员解决问题。
让运行时期问题减少,安全。
b)避免了强制转换的麻烦。
什么时候使用泛型呢?是在使用java提供的API的一些对象时,只要见到<>就要定义泛型,通常在集合框架中很常见。
<>就是用来接受类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
自定义泛型自定义泛型类自定义泛型有什么好处呢?自定义泛型最大的好处就是扩展性好。
我们看看如下的例子:class GenericsTool<T>{private T t;public T getObject(){return t;}public void setObject(T t){this.t=t;}}class CustomGenericsDemo{public static void main(String[] args){/*Objcet*/ObjectTool ot=new ObjectTool();ot.setObject(new Student());Student stu=(Student)ot.getObject();/*Generics,T也可以是Student*/GenericsTool<Person> gt=new GenericsTool<Person>();gt.setObject(new Person());Person p=gt.getObject();//不需要强制转换}}我们可以看出自定义泛型的可扩展性高。