java介面使用(歸併排序例項)
阿新 • • 發佈:2018-12-17
介面的關鍵字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();
}
}
}