題目:創建一個包含兩個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