- 泛型使用场景:
我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。 - java 中泛型标记符:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
// 泛型方法 printArray
public static < E > void printArray( E[] inputArray )
{
// 输出数组元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
- 泛型类
泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
Box<Integer> integerBox = new Box<Integer>();
- 类型通配符一般是使用 ? 代替具体的类型参数。
public static void getData(List<?> data) {
System.out.println("data :" + data.get(0));
}
- java中Comparable<T>与Comparator<T>的使用与区别
1.两者声明的方法不同。前者是compareTo()方法,后者是compare()方法。
2.Comparable<T>是内部比较器,比较属性,静态绑定,指出此类有什么样的排序方法;而Comparator<T>是外部比较器,比较器,动态绑定。
3.如果一个类具有可比较的属性的话,并且想对该类的对象进行排序,最好是实现Comparable<T>接口。如果某个类已经定义好了,不想再修改,并且又想自定义规则对该类的对象进行排序,可以创建一个比较器进行排序。
public class Apple implements Comparable<Apple> {
/**
* 苹果的重量
*/
private int weight;
/**
* 自然排序即从小到大
* 返回1的,代表此对象比参数对象大,排在后面,这样就可以控制降序或升序排列
*/
@Override
public int compareTo(Apple apple) {
if (this.weight > apple.getWeight())
{
return -1;
}
else if (this.weight < apple.getWeight())
{
return 1;
}
else
{
return 0;
}
}}
- Java Arrays.Sort方法重写
//template
Arrays.sort(T[], new Comparator<T>() {
public int compare(T a, T b){
return b - a;//从大到小排序
}
})
Arrays.sort(h, new Comparator<String>() {
@Override
public int compare(String a, String b) {
if(a.charAt(0)!=b.charAt(0)){
return b.charAt(0)-a.charAt(0);
}
String l1=a+b;
String l2=b+a;
return l2.compareTo(l1);
}
});