22. java 泛型 studnet 年龄的比较

定义Pair类

package com.fanxing;

/**
 * 泛型的应用
 * @author Administrator
 *
 * @param <T>
 */
//Type
public class Pair <T>{
	private T min;
	private T max;
	public T getMin() {
		return min;
	}
	public void setMin(T min) {
		this.min = min;
	}
	public T getMax() {
		return max;
	}
	public void setMax(T max) {
		this.max = max;
	}
	
	//构造函数
	public Pair(T min, T max) {
		super();
		this.min = min;
		this.max = max;
	}
	//默认输出
	@Override
	public String toString() {
		return "Pair [min=" + min + ", max=" + max + "]";
	}
	
	
	
	

}

定义Compare 类

package com.fanxing;

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

public class Compare {
//	public static <T extends Object> Pair<T> minmax(T[] nums)
	public static <T extends Comparable> Pair<T> minmax(T[] nums)
	{
		T min=nums[0];
		T max=nums[0];
		for (int i = 0; i < nums.length; i++) {
			if(min.compareTo(nums[i])>0)
			{
				min=nums[i];
			}
			if (max.compareTo(nums[i])<0) {
				max=nums[i];
			} 
			
		}
		return new Pair<T>(min, max);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//如果是int 会报错
		Integer[] numArr=new Integer[]{3,23,1,344,56};
		Pair< Integer> pair=Compare.minmax(numArr);
		System.out.println(pair);//Parameters
		
		String [] str=new String[]{"abc","aad","abd","cdf"};
		Pair<String> pair2=Compare.minmax(str);
		System.out.println(pair2);//Pair [min=aad, max=cdf]
		
		
		//时间的比较
		GregorianCalendar[] calendarAll=new GregorianCalendar[]
				{
				new GregorianCalendar(2013, 1, 23),//2013-2-23
				new GregorianCalendar(2000, 1, 23),
				new GregorianCalendar(2013, 1, 22),
				new GregorianCalendar(2013, 2, 23)
				};
		Pair<GregorianCalendar> pair3=Compare.minmax(calendarAll);
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
		String strMin=dateFormat.format(pair3.getMin().getTime());
		System.out.println(strMin);//2000-02-23
		String strMax=dateFormat.format(pair3.getMax().getTime());
		System.out.println(strMax);//2013-03-23

	}

}
/**
 * Studnet 类
 * name
 * age
 * stuNum
 * 判断 年龄最大 ,学号最小 等问题
*/

定义一个Student类

package com.fanxing;

/**
 * 实现Comparable接口 
 * 比较 数组中年龄最小和最大的
 * @author Administrator
 *
 */
//直接将泛型设置为 Student
//public class Student  implements Comparable<Student>
public class Student  implements Comparable {
	private int stuNum;
	private String stuName;
	private int stuAge;
	public int getStuNum() {
		return stuNum;
	}
	public void setStuNum(int stuNum) {
		this.stuNum = stuNum;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getStuAge() {
		return stuAge;
	}
	public void setStuAge(int stuAge) {
		this.stuAge = stuAge;
	}
	
	//默认输出
	@Override
	public String toString() {
		return "Student [stuNum=" + stuNum + ", stuName=" + stuName
				+ ", stuAge=" + stuAge + "]";
	}
	
	//构造方法
	public Student(int stuNum, String stuName, int stuAge) {
		super();
		this.stuNum = stuNum;
		this.stuName = stuName;
		this.stuAge = stuAge;
	}
	@Override
//	public int compareTo(Student o)//设定泛型为Student 直接生成为Sudent 
	public int compareTo(Object o) {
		//instanceof 的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
	    if (! (o instanceof Student)) {
			return -1;
		} 
	    Student otherStudent=(Student)o;
	    if (this.stuAge>otherStudent.stuAge) {
			return 1;
		} else if(this.stuAge<otherStudent.stuAge) {
			return -1;
		}
		else
		{
			return 0;
		}
		
	}
	
	//将年龄设置为 Integer  可以直接返回 return this.stuAge.compareTo(o.stuAge);
	
	//泛型就是一个类型的参数化,没有它程序照样写
	
	//泛型的一些规则和限制
	//1.泛型的类型参数智能是类类型(包括自定义类),不能是简单类
	//2.同一种泛型可以对多个版本(因为参数类型是不确定),不同bean本的泛型实例是不兼容的
	//3.泛型的类型参数可以有多个
	//4.泛型的参数类型可以使用extends 语句,例如<T extends superClass>,习惯上成为“有界类型”
	//5.泛型的参数类型还可以是通配符类型Class<?> classType=ClssforName(java.lang.String)

}


定义一个测试类

package com.fanxing;

public class TestClass {

	public static void main(String[] args) {
		Student [] studentAll=new Student[]{
			new Student(1001, "qian", 20),
			new  Student(1004, "zhang", 22),
			new Student(1020, "tong", 24)
			
		};
		
		Pair<Student> pair=Compare.minmax(studentAll);
		System.out.println(pair.getMin().toString());
		System.out.println(pair.getMax().toString());

	}

}



你可能感兴趣的:(22. java 泛型 studnet 年龄的比较)