java接口使用(归并排序实例)

接口的关键字interface声明一个接口,一个类可以用implements关键字来实现接口中的一些方法。
这里就拿比较的接口Comparable来举例,细细体会接口对于降低代码耦合度的作用。
声明Compare接口

public interface Comparable {
    public int compareTo(Object o);
}

在一个类中实现接口的compareTo方法

public class Teacher implements Comparable {

    int no;
    String name;

    public Teacher(int no, String name) {
        this.no = no;
        this.name = name;
    }

    public void print() {
        System.out.println("Student [no=" + no +
                ", name=" + name + "]");
    } 	
    public int compareTo (Object o) {
        return no - ((Teacher)o).no;
    }
}

归并排序类,里面实现了排序方法。

public class MergeSort {
    public static void Sort(Object[] a) {
        int len = a.length;
        MS(a, 0, len - 1);
    }
    private static void MS(Object[] a, int L, int R) {
        if(L >= R) return;
        int mid = (L+R) / 2;
        MS(a, L, mid);
        MS(a, mid+1, R);
        Merge(a, L, mid, R);
    }
    private static void Merge(Object a[], int L, int m, int R) {
        int n = R, i = L, j = m+1;
        Object t[] = new Object[a.length];
        int cur = L;
        while(i <= m && j <= n) {
            if(((Comparable)a[i]).compareTo(a[j]) <= 0) {     // 注意这里的写法,强制转换成Compare类,可以使用compareTo()方法,但这个方法的具体作用还要看传入的的Object的类中对compareTo是怎么实现的。
                t[cur++] = a[i++];
            }
            else t[cur++] = a[j++];
        }
        while(i <= m) t[cur++] = a[i++];
        while(j <= n) t[cur++] = a[j++];
        for(int z = L; z <= R; z++) {
            a[z] = t[z];
        }
    }
}

使用方法

public class Main {
    public static void main(String[] args) {
        MergeSort op = new MergeSort();
        Teacher[] ss = {
                new Teacher(2,"b"),
                new Teacher(5,"e"),
                new Teacher(3,"a"),
                new Teacher(1,"f")
        };
        op.Sort(ss);
        for (Teacher s : ss) {
            s.print();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值