《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接口来实现比较算法实现排序。

      

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