1. 程式人生 > >java介面使用(歸併排序例項)

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();
        }
    }
}