今天在研究快速排序的时候发现可以把只能排列整数的方法改进一下,实现可以排列字符串、小数,甚至对象,这当中就用到了Comparable这个接口。下面是改进后的例子:
public class Sort {
public static void insertionSort(Comparable[] a){
int i,j,n=a.length;
Comparable key;
for(j=1;j<n;j++){
key=a[j];
i=j-1;
while(i>=0&&a[i].compareTo(key)>0){
a[i+1]=a[i];
i--;
}
a[i+1]=key;
}
}
}
public class Test1 {
/**
* @param args
*/
public static void main(String args[]) {
// TODO Auto-generated method stub
Integer[] a={5,1,0,3,4,6,7,2,9,8};
String[] b={"xingtai","chongqing","beijing","shijiazhuang","tangshan"};
Double[] c={1.8,2.3,4.2,2.5,4.4,7.4};
int i1=a.length,i2=b.length,i3=c.length;
Sort.insertionSort(a);
for(int i=0;i<i1;i++){
System.out.print(a[i]+" ");
}
System.out.println();
Sort.insertionSort(b);
for(int i=0;i<i2;i++){
System.out.print(b[i]+" ");
}
System.out.println();
Sort.insertionSort(c);
for(int i=0;i<i3;i++){
System.out.print(c[i]+" ");
}
System.out.println();
}
}
运算结果为:
0 1 2 3 4 5 6 7 8 9
beijing chongqing shijiazhuang tangshan xingtai
1.8 2.3 2.5 4.2 4.4 7.4
注意Comparable接口已经泛型化了,因此我们不必在新建一个接口,从以上程序看出可以直接引入CompareTo()方法,所有实现此接口的类必须覆盖此抽象方法,使之能比较这种类的对象x和另一个对象y间的大小:x>y返回1,x<y返回-1,x=y返回0。而包装类Integer、Character、Double、Float等以及字符串类String都已经实现了Comparable的类,系统已经为其实现了CompareTo方法,可以直接使用。
当比较的类型是个对象时:
public class Student extends Comparable<Student>{}类中要重写CompareTo的方法,具体比较方法按题意决定。