- 泛型使用場(chǎng)景:
我們可以寫一個(gè)泛型方法來對(duì)一個(gè)對(duì)象數(shù)組排序屠橄。然后栈妆,調(diào)用該泛型方法來對(duì)整型數(shù)組扛吞、浮點(diǎn)數(shù)數(shù)組初肉、字符串?dāng)?shù)組等進(jìn)行排序酷鸦。 - java 中泛型標(biāo)記符:
E - Element (在集合中使用,因?yàn)榧现写娣诺氖窃?
T - Type(Java 類)
K - Key(鍵)
V - Value(值)
N - Number(數(shù)值類型)
? - 表示不確定的 java 類型
- 所有泛型方法聲明都有一個(gè)類型參數(shù)聲明部分(由尖括號(hào)分隔)臼隔,該類型參數(shù)聲明部分在方法返回類型之前
// 泛型方法 printArray
public static < E > void printArray( E[] inputArray )
{
// 輸出數(shù)組元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
- 泛型類
泛型類的聲明和非泛型類的聲明類似嘹裂,除了在類名后面添加了類型參數(shù)聲明部分。
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>();
- 類型通配符一般是使用 ? 代替具體的類型參數(shù)摔握。
public static void getData(List<?> data) {
System.out.println("data :" + data.get(0));
}
- java中Comparable<T>與Comparator<T>的使用與區(qū)別
1.兩者聲明的方法不同寄狼。前者是compareTo()方法,后者是compare()方法氨淌。
2.Comparable<T>是內(nèi)部比較器泊愧,比較屬性,靜態(tài)綁定盛正,指出此類有什么樣的排序方法删咱;而Comparator<T>是外部比較器,比較器豪筝,動(dòng)態(tài)綁定痰滋。
3.如果一個(gè)類具有可比較的屬性的話,并且想對(duì)該類的對(duì)象進(jìn)行排序续崖,最好是實(shí)現(xiàn)Comparable<T>接口敲街。如果某個(gè)類已經(jīng)定義好了,不想再修改袜刷,并且又想自定義規(guī)則對(duì)該類的對(duì)象進(jìn)行排序聪富,可以創(chuàng)建一個(gè)比較器進(jìn)行排序。
public class Apple implements Comparable<Apple> {
/**
* 蘋果的重量
*/
private int weight;
/**
* 自然排序即從小到大
* 返回1的著蟹,代表此對(duì)象比參數(shù)對(duì)象大墩蔓,排在后面,這樣就可以控制降序或升序排列
*/
@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);
}
});