JAVA泛型和集合的概念

1.集合概述

在Java API中,从1.5版本开始,提供了一些常用的集合类,包括List、Set和Map,其中List和Set实现了Collection的接口。这些集合类也叫作容器,用于存放类对象的引用。注意:List、Set和Map也是接口关系如下:

这些接口的特征如下:

1.Collection接口是List接口和Set接口的父接口,一般不直接使用

2.List接口不允许存放重复的对象,并且按照对象插入的顺序排列

3.Set接口不允许存放重复对象,并且按照自身内部的排序规则排列

4.Map接口按照“键 ---- 值”的形式存放对象,其中键对象不能重复,值对象可以重复,且按照自身的排序规则排列

这些集合类在java.util包中,如果程序中应用到这些类,就需要导入这个包

在java中这些集合类或者接口都已泛型的形式出现

2.泛型

“泛型”就是把定义变量、对象的类型成为参数,也就是“参数化类型”,在方法调用时要把实参传递给形参。类似方法设计中的形参,在设计类的时候,也可以把类型作为参数,也就是“类型形参化”;然后在对象实例化或者方法调用时,传入具体的类型,这种设计叫作泛型。泛型可以应用于类、接口和方法设计中,他们分别叫作泛型类、泛型接口和泛型方法

注意在泛型设计中。作为类型的实参必须是复合数据类型

2.1泛型类的应用

class Coordinate<T1,T2>{
	T1 x;
	T2 y;
	public T1 getX() {
		return x;
	}
	public void setX(T1 x) {
		this.x = x;
	}
	public T2 getY() {
		return y;
	}
	public void setY(T2 y) {
		this.y = y;
	}
	@Override
	public String toString() {
		return "Coordinate [x=" + x + ", y=" + y + "]";
	}
	
}
public class Test {
	public static void main(String[] args) {
		Coordinate<Integer,Long>p1=new Coordinate<Integer,Long>();
		p1.setX(10);
		p1.setY(15L);
		Coordinate<String,String>p2=new Coordinate<String,String>();
		p2.setX("横坐标10");
		p2.setY("纵坐标15");
		System.out.println(p1);
		System.out.println(p2);
	}
}

Coordinate [x=10, y=15]
Coordinate [x=横坐标10, y=纵坐标15]

在类Coordinate的后面有T1和T2,这是泛型参数,放在类名后面的尖括号中,参数之间用“,”隔开。泛型参数可以有多个,根据实际生产中得到,且泛型参数名应符合Java标识符的要求

类名后面尖括号定义的T1和T2为两种类型,具体的类型在设计中不能够确定,这是泛型的本意

格式如下:

类名<类型实参列表>对象名=new 构造方法<类型实参列表>(实例化实参);

2.2泛型方法的应用

public class Test {
	public static void main(String[] args) {
		Integer[] intE= {1,2,3,4,55,66,89};
		System.out.println("max="+getMax(intE)+'\t'+intE.getClass());
		Double [] doubleE= {11.22,22.33,44.33,66.33};
		System.out.println("max="+getMax(doubleE)+'\t'+doubleE.getClass());
		
	}
	public static<T extends Number>T getMax(T array[]){
		T max=array[0];
		for(T element:array) {
			max=element.doubleValue()>max.doubleValue()?element:max;
		}
		return max;
	}
}

max=89    class java.lang.Integer;
max=66.33    class java.lang.Double;

在定义方法时,引入了泛型,这种方法叫泛型方法

在这种方法中,定义了一个泛型参数T,并用T定义方法返回值类型和形参类型,同时可以用T定义局部变量max以及循环变量element的类型

在 public static<T extends Number>T getMax(T array[]) 这里使用了泛型范围限制,叫做泛型上下界

2.3泛型接口

例如:定义一个带泛型的Classroom接口,定义一个activity抽象方法,然后使用Teacger类和Student类实现Classroom接口

interface Classroom<T>{
	String activity(T action);
}
//接口实现
class Teacher implements Classroom<Teaching>{
	String name;
	public Teacher(String name) {
		super();
		this.name = name;
	}
	@Override
	public String toString() {
		return name+activity(new Teaching());
	}
	@Override
	public String activity(Teaching T) {

		return T.action();
	}
}
class Student implements Classroom<Learning>{
	String name;
	public Student(String name) {
		super();
		this.name = name;
	}
	@Override
	public String activity(Learning L) {
		return L.action();
	}
	@Override
	public String toString() {
		return name+activity(new Learning());
	}
}
class Teaching{
	public String action() {
		return("正在来的路上");
	}
}
class Learning{
	public String action() {
		return("正在上课");
	}
}
public class Test{
	public static void main(String[] args) {
		Teacher tea=new Teacher("老师");
		System.out.println(tea);
		Student stu=new Student("学生");
		System.out.println(stu);
	}
}

老师正在来的路上
学生正在上课

总结出泛型接口的格式:

interface 接口名称<泛型参数>{

        接口体

}

实现接口的类格式:

class 类名 implements 接口名<泛型参数>{

        类体

}

在这里的泛型参数是用自定义的类型

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值