《Java编程思想》学习笔记7——泛型编程基础

一般的类和方法都是针对特定数据类型的,当写一个对多种数据类型都适用的类和方法时就需要使用泛型编程,java的泛型编程类似于C++中的模板,即一种参数化类型的编程方法,具体地说就是将和数据类型相关的信息抽象出来,主要提供通用的实现和逻辑,和数据类型相关的信息由使用时参数决定。

1.泛型类/接口:

(1).泛型接口:

如一个提供产生指定类的接口:

public interface Gernerator{
	T next() ;
}
public class A implement Generator{
	A next(){
		return new A();
}
}

(2).泛型类:

一个使用泛型实现的栈数据结构如下:

public class LinkedListStack{
	//节点内部类
	private static class Node{
		U item;
		Node next;
		Node(){
			item = null;
			next = null;
}
		Node(U item, Node next){
	this.item = item;
	this.next = next;
}
Boolean end(){
	return item == null && next == null;
}
}
private Node top = new Node();
public void push(T item){
	top = new Node(item, top);
}
public T pop(){
	T result = top.item;
	if(!top.end()){
		top = top.next();
}
return result;
} 
}

使用这个使用泛型实现的栈,可以操作各种数据类型。

2.泛型方法:

例如:

public class GenericMethods{
	public  void f(T x){
		System.out.println(x.getClass().getName()) ;
}
public static void main(String[] args){
	GenericMethods gm = new GenericMethods();
	gm.f(“”);
	gm.f(1);
	gm.f(1.0);
	……
} 
}

输出结果为:

java.lang.String

java.lang.Integer

java.lang.Double

3.泛型集合:

Java中泛型集合使用的非常广泛,在Java5以前,java中没有引入泛型机制,使用java集合容器时经常遇到如下两个问题:

a.       java容器默认存放Object类型对象,如果一个容器中即存放有A类型对象,又存放有B类型对象,如果用户将A对象和B对象类型弄混淆,则容易产生转换错误,会发生类型转换异常。

b.       如果用户不知道集合容器中元素的数据类型,同样也可能会产生类型转换异常。

鉴于上述的问题,java5中引入了泛型机制,在定义集合容器对象时显式指定其元素的数据类型,在使用集合容器时,编译器会检查数据类型是否和容器指定的数据类型相符合,如果不符合在无法编译通过,从编译器层面强制保证数据类型安全。

(1).java常用集合容器泛型使用方法:

如:

public class New{
	public static  Map map(){
		return new HashMap();
}
public static  List list(){
	return new ArrayList() ;
}
public static  LinkedList lList(){
	return new LinkedList();
}
public static  Set set(){
	return new HashSet();
}
public static  Queue queue(){
	return new LinkedList() ;
}
;public static void main(String[] args){
	Map> sls = New.map();
	List ls = New.list();
	LinkedList lls = New.lList();
	Set ss = New.set();
	Queue qs = New.queue();
}
}

(2).Java中的Set集合是数学上逻辑意义的集合,使用泛型可以很方便地对任何类型的Set集合进行数学运算,代码如下:

public class Sets{
	//并集
	public static  Set union(Set a, Set b){
		Set result = new HashSet(a);
		result.addAll(b);
		return result;
}
//交集
public static  Set intersection(Set a, Set b){
	Set result = new HashSet(a);
	result.retainAll(b);
	return result;
}
//差集
public static  Set difference(Set a, Set b){
	Set result = new HashSet(a);
	result.removeAll(b);
	return Result;
}
//补集
public static  Set complement(Set a, Set b){
	return difference(union(a, b), intersection(a, b));
}
}


你可能感兴趣的:(Thinking,in,java,java技术)