題目:建立一個包含兩個String對象的類,并使其成為comparable,是以它們之間的比較隻關心第一個String,用這個類的對象填充一個數組和一個ArrayList。證明排序可以正确工作。現在建立一個隻關心第二個String的Comparable,并證明排序仍舊可以正确工作。使用你的comparator執行二分查找。
解題思路:
(1)實作comparable接口的對象清單(和數組)可以通過Collections.sort(Arrays.sort)自動排序。
(2)String對象已經實作了Comparable接口,是以可以兩個String對象的比較可以是:a.compareTo(b)。
代碼如下:
comparable接口,位于java.lang包中,将比較代碼嵌入自身類中,原型如下:
public interface Comparable<T>{
//接口中的方法自動屬于public
int compareTo(T other){
}
}
import java.util.*;
class Com implements Comparable<Com>{
private String v1;
private String v2;
public Com(String v1,String v2){
this.v1 = v1;
this.v2 = v2;
}
public int compareTo(Com cc){
//比較第一個值v1
int result = v1.compareTo(cc.v1);
return result;
}
public String getV1(){
return v1;
}
public String getV2(){
return v2;
}
}
public class Test {
public static void main(String[] args){
//類對象填充數組
Com[] c = new Com[3];
c[0] = new Com("cc","cc");
c[1] = new Com("bb","bb");
c[2] = new Com("aa","aa");
Arrays.sort(c);
for(int i=0;i<3;i++){
System.out.println(c[i].getV1());
}
//類對象填充ArrayList
List<Com> cc = new ArrayList<Com>();
cc.add(new Com("cc","cc"));
cc.add(new Com("bb","bb"));
cc.add(new Com("aa","aa"));
Collections.sort(cc);
for(Com ele:cc){
System.out.println(ele.getV1());
}
}
}
對象數組排序輸出結果為
aa bb cc
類對象填充ArrayList輸出結果為
aa bb cc
comparator位于java.util包中,在一個獨立的類中實作比較, 如果沒有考慮到compare的問題而未實作comparable接口,可以實作comparator接口來實作比較算法實作排序。