1.泛型概念
1.使用场景:在使用集合的时候 不确定其数据类型的时候就可以使用泛型。
泛型就是一个变量,用于来接收其数据类型
2.泛型的使用:
实例化集合的时候可以明确其数据类型
List<数据类型> li = new ArrayList<数据类型>();
3.泛型使用的注意点:
(1) 泛型前后的数据类型必须一致
例子: List<String> li = new ArrayList<String>();
(2) 在jdk1.7之后出现菱形泛型 后面的数据类型可以省略
例子: List<String> li = new ArrayList<>();
(3) 泛型的数据类型必须是引用数据类型 不能是基本数据类型
4.泛型的好处:
(1) 避免强制类型转换
(2) 可以将运行时异常提前到编译期间
5.泛型使用的一些字母
定义泛型使用的字母都是大写 通常使用的字母 T W K V Z E .....
2.定义泛型类
1.语法:
访问修饰符 class 类名<泛型>{
类中的成员都可以使用这个泛型
}
3.定义泛型方法
1.语法:
访问修饰符 <泛型> 返回值类型 方法的名称(参数列表) {
方法体
return 返回值
}
2.静态方法可以设置泛型 普通的成员方法也可以设置泛型
3.注意点
普通成员方法可以使用类定义的泛型
静态方法是不可以使用类定义的泛型 静态方法优先于对象而存在
4.定义泛型接口
1.使用的场景:
(1)实现类确定其泛型
(2)实现类不确定其泛型 继续使用接口的泛型
5.泛型的通配符
1.概念:泛型的通配符是使用?来进行表示 ?可以表示任意的数据类型
实例化对象的时候 不能使用?来表示泛型
一般用于作为方法的参数来使用 泛型没有继承的概念
2.三种常见的通配符使用
containsAll(Collection<?> c) ?在参数列表中使用 表示的是任意的数据类型(常用)
<? extends E> 表示泛型的范围是其本身E 或者是其子类
<? super T> 表示泛型的范围其本身T 或者是其父类
6.Collections集合的工具类
方法的名称 | 方法的说明 |
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) | 查找指定元素在集合中索引值(集合一定是按照升序进行排列) |
public static <T> void copy(List<? super T> dest, List<? extends T> src) | 将所有元素从一个列表复制到另一个列表(dest目标数据必须指定长度(需要给一些默认值)) |
public static <T> void fill(List<? super T> list, T obj) | 使用指定元素替换指定列表中的所有元素 |
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) | 获取集合中最大值 |
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) | 获取集合中最小值 |
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) | 使用另一个值替换列表中出现的所有某一指定值 |
public static void reverse(List<?> list) | 控制反转 |
public static void shuffle(List<?> list) | 随机置换集合中的元素 |
public static <T extends Comparable<? super T>> void sort(List<T> list | 集合中的元素进行升序排列 |
public static void swap(List<?> list, int i, int j) | 在指定列表的指定位置处交换元素 |
public static <T> List<T> asList(T... a) | 数组Arrays工具类的方法 将数组转换为集合 |