黑马程序员技术交流社区
标题:
泛型(Generic) 求技术分
[打印本页]
作者:
pzfpang449
时间:
2013-1-23 17:41
标题:
泛型(Generic) 求技术分
本帖最后由 pzfpang449 于 2013-1-24 10:03 编辑
泛型需要注意事项
1,使用泛型时,泛型类型必须为引用类型,不能是基本数据类型
2,泛型时提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源码级别上,既挡住向集合中插入非法数据。但编译器编译带有泛型的java程序后,生成的class文件中奖不再带有泛型信息,这个过程称之为“擦除“。
例子如下
package com.itcast;
import java.util.ArrayList;
public class fanxing {
@Test
public void test1(){
List<String> list=new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
//传统
Iterator<String> it=list.iterator();
while(it.hasNext()){
String value=it.next();
System.out.println(value);
}
}
@Test
public void test2(){
Map<Integer,String> map=new LinkedHashMap<Integer,String>();
map.put(1, "aa");
map.put(2, "bb");
map.put(3, "cc");
/* Set<Map.Entry<Integer, String>> set= map.entrySet();
Iterator<Map.Entry<Integer, String>> it= set.iterator();
while(it.hasNext()){
Map.Entry<Integer, String> entry=it.next();
Integer key=entry.getKey();
String value=entry.getValue();
System.out.println(key+":"+value);
}*/
//增强for,常用
for(Map.Entry<Integer, String> entry:map.entrySet()){
Integer key=entry.getKey();
String value=entry.getValue();
System.out.println(key+":"+value);
}
}
}
结果为
1:aa
2:bb
3:cc
自定义泛型
1,类上声明的泛型,作用到类中的所有方法
2,静态成员无效,需要单独声明
public static <T> void c(T t){}
例
1,编写一个泛型方法,实现指定位置上的数组的元素的交换
//编写一个泛型方法,实现指定位置上的数组的元素的交换
public <T> void test(T arr[],int post1,int post2){
T temp=arr[post1];
arr[post1]=arr[post2];
arr[post2]=temp;
}
2, //编写一个泛型方法,接受一个任意数组,并颠倒数组中的所有元素
public <T> void test(T arr[]){
int start = 0;
int end = arr.length;
while (true) {
if (start >= end) {
break;
}
T temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
作者:
pzfpang449
时间:
2013-1-23 17:49
好人那,祝您新年快乐、工作顺利、事业、学业蒸蒸日上!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2