天天看點

《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接口來實作比較算法實作排序。

繼續閱讀