例:写一个方法对任意引用数据类型数组进行排序。具体要求如下:
1) 方法声明为public void sortArr(Object arr[]){ }
2) 方法中首先输出排序前数组内容,然后进行排序,最后输出排序后数组内容。
3) 可以是冒泡排序或其他算法实现,不直接调用Java提供的方法实现排序。
思路:任意类实现Comparable接口来实现该引用数据类型的元素排序,在sort()方法中将Object强转成Comparable实现两个对象的比较。
/**
* 排序类(自定义对象的比较和排序)
* @author john
*
*/
public class Paixu implements Comparable<Paixu> {
int sum;
// 实现比较接口后重写比较方法
@Override
public int compareTo(Paixu o) {
if(sum>o.sum){
return 1;
}else if(sum<o.sum){
return -1;
}
return 0;
}
// 自定义排序方法
public static void sortArr(Object arr[]) {
System.out.println("排序前:");
for (Object o : arr) {
System.out.println(((Paixu)o).sum);
}
// 排序
Object temp;
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (((Paixu)arr[j]).compareTo((Paixu)arr[j + 1]) > 0) {
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
System.out.println("排序后:");
for (Object o : arr) {
System.out.println(((Paixu)o).sum);
}
}
public static void main(String[] args) {
Paixu [] a=new Paixu[5];
Paixu a1=new Paixu();
a1.sum=25;
Paixu a2=new Paixu();
a2.sum=8;
Paixu a3=new Paixu();
a3.sum=13;
Paixu a4=new Paixu();
a4.sum=-4;
Paixu a5=new Paixu();
a5.sum=10;
a[0]=a1;
a[1]=a2;
a[2]=a3;
a[3]=a4;
a[4]=a5;
Paixu.sortArr(a);
}
}
结果:
排序前:
25
8
13
-4
10
排序后:
-4
8
10
13
25