《java編程思想》習題,容器深入研究——練習40(5)

題目:創建一個包含兩個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接口來實現比較算法實現排序。

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章