泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行。
为什么我们要在程序中使用泛型呢,JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免就会引发程序的一些安全性问题,所以我们一边为了减少不必要的错误,经常使用泛型。下面我们举例说明
ArrayList list = new ArrayList();
list.add("abc");
Integer num = (Integer) list.get(0); //运行时会出错,但编码时发现不了
list.add(new Random());
list.add(new ArrayList());
for(int i=0;i<list.size();i++){
(?)list.get(i); //此处取出来的对象应转换成什么类型
}
- 注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。
- 泛形的基本术语,以ArrayList<E>为例:<>念着typeof
- ArrayList<E>中的E称为类型参数变量
- ArrayList<Integer>中的Integer称为实际类型参数
- 整个称为ArrayList<E>泛型类型
- 整个ArrayList<Integer>称为参数化的类型ParameterizedType
现在我们用泛型写几个实例应用
package cn.csdn.Generic;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
public class Demo01 {
@Test
public void test1(){
List<String> list =new ArrayList<String>();
list.add("abc");
list.add("123");
list.add("asf");
//for循环
for(String str:list) {
System.out.println(str);
}
//迭代
Iterator<String> ite=list.iterator();
while(ite.hasNext()){
String str=ite.next();
System.out.println(str+"这是用的迭代");
}
}
@Test
public void test2(){
Map<Integer,String> map =new HashMap<Integer,String>();
map.put(1,"zhangsan");
map.put(2,"lisi");
map.put(3,"wangwu");
Set<Map.Entry<Integer, String>> set=map.entrySet();
for(Map.Entry<Integer, String> ma:set){
System.out.println(ma.getKey()+" "+ma.getValue());
}
}
@Test
public void test3(){
Map<Integer,String> map =new HashMap<Integer,String>();
map.put(1,"zhangsan");
map.put(2,"lisi");
map.put(3,"wangwu");
Set<Integer> se =map.keySet();
Iterator<Integer> ite=se.iterator();
while(ite.hasNext()){
int k=ite.next();
System.out.println(k+" "+map.get(k)+"这是用的迭代");
}
for(Integer i:se){
System.out.println(i+" "+map.get(i)+"这是用的for循环");
}
}
}
分享到:
相关推荐
网上很多讲泛型原理的文章, 很少有提到我们什么时候使用泛型有优势, 我就泛型类和方法搞了两个实例,算是探索下泛型使用的冰山一角吧,在我博客里面有配套的文章,可以配套看.
c# 泛型应用实例, c#(vs2008)
C#中的集合与泛型应用实例,针对集合与泛型进行详细讲解,代码简单易懂。
一个泛型集合的应用,主要讲的dictionary,obj>的应用
集合了C++多重泛型应用实例,让初学者能够了解泛型编程的魅力,为学好C++ 打下良好基础。
通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率
收藏了枚举和泛型的一些具体的应用实例,希望能给大家更多的帮助!
泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...
Delphi中的泛型基础及简单应用
Python中泛型函数应用案例.pdf
此实例代码大部分从网上整理而来,因为近期感觉泛型、集合等在ASP.NET web项目中开发还是比较重要的,对提高系统情能很有帮助。
泛型应用--图的深度(广度)优先遍历.成语接龙例
泛型集合与数组应用老师找学生 泛型集合 数组应用 老师找学生 C# 北大青鸟高老师
这是一个泛型委托的示例,主要是让初学者了解泛型委托的用法,虽然很简单,但是代码有注释,我的这个例子是在vs2010中做的,用vs08的朋友们,最好还是转一下,但是绝对能实现(本程序是控制台应用程序,适合初学者)...
文档清楚明了的讲述如何在WCF的操作方法中达到泛型效果。
泛型及静态页面生成事例
第8章 内部类和泛型;回顾;本章内容;8.1 内部类;8.1.1 内部类概述;8.1.2 内部类使用;...8.4.2 泛型应用;8.4.2 泛型应用;8.4.2 泛型应用; 8.4.2 泛型应用 ;8.4.3 学生实践练习;8.4.3 学生实践练习;总结
主要关于泛型应用、原理、协变逆变、泛型缓存等相关方面的知识需要的可以下载学习
C++泛型编程和设计模式应用,由Addison Wesley 公司出版。