题目:创建一个包含两个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