Java之泛型

泛型

 泛型的概述

泛型:参数化类型

类型形参:<T><E><K><V><U><R>。。。。

类型实参:必须是引用数据类型,不能是基本数据类型

       <String><Integer><Student><ArrayList<String>>……

形式一:泛型类与泛型接口

1、声明语法格式:

【修饰符】 class 类名/接口<类型形参列表>{   

}​

【修饰符】 class 类名/接口<类型形参1 extends 父类上限>{   

}

【修饰符】 class 类名/接口<类型形参1 extends 父类上限 & 父接口上限>{   

}

在类名或接口名后面声明的泛型形参类型,可以在当前类或接口中使用,用作声明成员变量、方法的形参、方法的返回值。

但是不能用于静态成员

2、使用语法格式

在(1)创建泛型类、泛型接口的对象时,为泛型形参指定具体类型

       2)在继承泛型类或实现泛型接口时,为泛型形参指定具体类型

示例代码

ArrayList<String> list = new ArrayList<String>();

ArrayList<String> list = new ArrayList<>();//JDK1.7之后可以省略

​class MyStringArrayList extends ArrayList<String>{

}​

class Employee implements Comparable<Employee>{

   public int compareTo(Employee e){       

  }

}​

Arrays.sort(数组,  new  Comparator<泛型实参>(){

   public int compare(泛型实参类型  o1, 泛型实参类型  o2){       

  }

});

3、泛型如果没有指定,会被擦除,按照最左边的上限处理,如果没有指定上限,按照Object处理

形式二:泛型方法

1、声明的语法格式

【修饰符】 <泛型形参列表> 返回值类型 方法名(【数据形参列表】)throws 异常列表】{}

【修饰符】 <泛型形参 extends 父类上限 & 父接口上限> 返回值类型 方法名(【数据形参列表】)throws 异常列表】{}

1)在方法返回值类型前面声明的泛型形参类型,只能在当前方法中使用,用于表示形参的类型或返回值类型,或方法局部变量的类型,和别的方法无关。

2)泛型方法可以是静态方法,也可以是非静态方法

2 使用

当调用方法,会根据具体的数据的实参的类型,来确定泛型实参的类型。

通配符?

1?:代表任意引用数据类型

2? extends 上限:代表上限本身或它的子类

3? super 下限:代表下限本身或它的父类

例如:

ArrayList<?>:表示可以接受任意类型

ArrayList<?> list = new ArrayList<String>();

ArrayList<?> list = new ArrayList<Integer>();

ArrayList<?> list = new ArrayList<Animal>();

ArrayList<? extends 上限>

ArrayList<? extends Person> list = new ArrayList<Person>();

ArrayList<? extends Person> list = new ArrayList<Animal>();//Animal不行,因为Animal是父类

ArrayList<? extends Person> list = new ArrayList<Student>();

ArrayList<? extends Person> list = new ArrayList<Dog>();//Dog也不行

ArrayList<? super 下限>

ArrayList<? super Person> list = new ArrayList<Person>();

ArrayList<? super Person> list = new ArrayList<Animal>();

ArrayList<? super Person> list = new ArrayList<Student>();//Student,因为Student是子类

ArrayList<? super Person> list = new ArrayList<Dog>();//Dog也不行

ArrayList<?>:不能添加元素,除了null

ArrayList<? extends 上限>:不能添加元素,除了null

ArrayList<? super 下限>:可以添加下限或下限子类的对象

 Collections工具类

java.util.Collections:工具类,操作集合

1public static <T> boolean addAll(Collection<? super T> c, T... elements)

添加elements的几个对象到c集合中。Telements对象的类型,要求Collection集合的元素类型必须是TT的父类

2public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)

list集合中用二分查找key的下标,如果存在返回的是合理的下标,如果不存在返回的是一个负数下标

T是元素的类型,

<? extends Comparable<? super T>>,要求集合的元素必须实现Comparable接口

<? super T>,在实现Comparable接口,可以指定Comparable<类型实参>TT的父类。

3public static boolean disjoint(Collection<?> c1, Collection<?> c2)

判断c1c2没有交集就为true

4public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

coll集合中最大元素

<T extends Object & Comparable<? super T>>:要求TT的父类实现Comparable接口

5public static <T extends Comparable<? super T>> void sort(List<T> list) list集合排序

<T extends Comparable<? super T>>:要求TT的父类实现Comparable接口

6public static <T> Collection<T> synchronizedCollection(Collection<T> c)

synchronizedXX开头的方法,表示把某种非线程安全集合转为一个线程安全的集合。

7public static <T> List<T> unmodifiableList(List<? extends T> list)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miki_souls

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值