一、比较器
1. Comparable
compareTo(T o)
只能定义一种比较大小的规则,如果排序的时候想按照其他的方式排序,那么就不可以了
必须要有比较的对象的类型实现
如果没有实现比较器接口Comparable,就调用sort方法排序 会发生ClassCastException
示例——学生类中有属性:名称和年龄 要求调用Arrays.sort方法对学生数组中的信息按照年龄排序输出
2. Comparator
compare(T o1,To2)
自定义比较器,必须单独定义一个类实现,不用比较的对象的类型进行实现,可以针对相同的类型
定义多个比较器类,可以有多种比较规则
1)定义实现类实现Comparator接口重写
2)以调用带Comparator类型参数的sort方法,生成匿名内部类
二、泛型
1.泛型的概念
泛型:宽泛的类型 编写的时候不去定义类型,在使用的时候,再去定义类型
泛型能够将数据类型作为一种参数传递,实现了类型参数化,是在jdk1.5引入的,它具备三个特点:
1)泛型能够将数据类型作为一种参数传递,实现了类型参数化,
2)在编译的时候检查类型安全,最大程度的防止运行期间的类型转换异常
3)类型转换为自动和隐式的
2、泛型类
示例一:
示例二:
示例三:
在Java中,使用E表示集合的元素类型;K和V分别表示键与值的类型;T(需要的时候还可以用U和S等)
表示任意类型。
也可以声明多个泛型参数
静态属性和静态方法中不能使用类中声明的泛型
原因,静态属性和方法是在类加载时要确定类型,
泛型是在声明对象并实例化时确定,所以在静态属性和方法不能使用泛型
基本数据类型不能作为泛型
3.泛型接口
1、声明语法
public interface A<T> { public void test(T t);}
2、传递泛型参数方式
1)在实现类中确定传递泛型参数方式,在不同的实现类中可以确定不同的类型
如果在实现类中不指定泛型有什么样的问题,可能会产生不安全的类型转换
2)在实现类中确定,实现类声明为泛型类的
3)实现类和接口中都不明确泛型