泛型

泛型

Generic JDK1.5(包含)以后出现的一种安全机制

泛型的出现,让我们的集合操作更加安全

泛型的出现,让程序出错的时间,从运行时期,提前到了编译时期

泛型出现之前,程序人员只能主观判断集合存储对象的数据类型

有了泛型,泛型就是强制的保证集合存储数据类型的唯一性

泛型避免了强制类型转换的麻烦

格式

       类<数据类型> 变量 = new 类<数据类型>();

什么时候使用泛型,当我们要使用一个类的时候,发现这个类的右边有<>

code
package cn.river.generic;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo {
	public static void main(String[] args) {
		ArrayList<String> al = new ArrayList<String>();
		al.add("river01");
		al.add("river02");
		al.add("river03");
		al.add("river04");
		al.add("river05");
		System.out.println(al);
		Iterator<String> it = al.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}
code2

package cn.river.generic;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo1 {
	public static void main(String[] args) {
		ArrayList<Person> al = new ArrayList<Person>();
		al.add(new Person("river01",21));
		al.add(new Person("river02",22));
		al.add(new Person("river03",23));
		al.add(new Person("river04",24));
		Iterator<Person> it = al.iterator();
		while(it.hasNext()){
			Person p = it.next();			
			System.out.println(p.name+"..."+p.age);
		}
	}
}
code3

package cn.river.generic;
import java.util.HashSet;
import java.util.Iterator;
public class GenericDemo2 {
	public static void main(String[] args) {
		HashSet<Person> hs = new HashSet<Person>();
		hs.add(new Person("river01",21));
		hs.add(new Person("river02",22));
		hs.add(new Person("river02",22));
		hs.add(new Person("river05",24));
		hs.add(new Person("river03",23));
		hs.add(new Person("river03",23));
		hs.add(new Person("river04",24));
		Iterator<Person> it = hs.iterator();
		while(it.hasNext()){
			Person p = it.next();
			System.out.println(p.name+"..."+p.age);
		}
	}
}
code4

package cn.river.generic;
import java.util.Iterator;
import java.util.TreeSet;
public classGenericDemo3 {
   public static void main(String[] args) {
      //TreeSet<Person> ts = newTreeSet<Person>();
      TreeSet<Person>ts = newTreeSet<Person>(new MyComparator());
      ts.add(new Person("river01",21));
      ts.add(new Person("river02",22));
      ts.add(new Person("river03",23));
      ts.add(new Person("river02",22));
      ts.add(new Person("river03",23));
      ts.add(new Person("river04",24));
      Iterator<Person>it = ts.iterator();
      while(it.hasNext()){
         Personp = it.next();
         System.out.println(p.name+"..."+p.age);
      }
   }
}
code5

package cn.river.generic;
import java.util.*;
/*
 * 定义一个类,类中有一个方法,可以建立一个类的对象
 * 泛型类
 */
public class GenericDemo4 {
	public static void main(String[] args) {
		Factory<Student> f = new Factory<Student>();
		f.setObj(new Student());
		Student s = f.getObj();
		System.out.println(s);
		
		Factory<Worker> fw = new Factory<Worker>();
		fw.setObj(new Worker());
		Worker w = fw.getObj();
		System.out.println(s);
	}
}
class Student{}
class Worker{}
class Factory<T>{
	private T obj;
	public void setObj(T obj){
		this.obj = obj;
	}
	public T getObj(){
		return obj;
	}
}
code6

package cn.river.generic;
class Test{
	public <T> void show(T s){
		System.out.println(s);
	}
	public static <T> void method(T s){
		System.out.println(s);
	}
}
public class GenericDemo5 {
	public static void main(String[] args) {
		Test t = new Test();
		t.show(false);
		
		Test.method(2.3);
	}
}
code7

package cn.river.generic;
import java.util.Comparator;
public class MyComparator implements Comparator<Person>{
	@Override
	public int compare(Person o1, Person o2) {
		// TODO Auto-generated method stub
		int num = o1.name.compareTo(o2.name);
		return num==0 ? o1.age-o2.age : num;
		}	
}
code8

package cn.river.generic;
public class Person implements Comparable<Person>{
	String name;
	int age;
	public Person(String name, int age){
		this.name=name;
		this.age=age;
	}
	public String toString(){
		return this.name+","+this.age;
	}
	public int hashCode(){
		return this.name.hashCode()+this.age*31;
	}
	public boolean equals(Object obj){
		
		if(obj==this) return true;
		Person p = (Person)obj;
		return this.name.equals(this.name) && this.age == age;
	}
	@Override
	public int compareTo(Person o) {
		int num=this.age - o.age;
		return num==0 ? this.name.compareTo(o.name) : num;
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值