寫給我自己看的資料結構筆記-Interface
這個主題,我會使用 Java 來說明資料結構,首先由 Interface 開始說起。
前言
直接開始吧,反正是寫給我自己看的。
為什麼會挑選這個主題呢?
- 因為我想複習
- 因為我 coding 很爛
- 因為新工作 coding 份量很少,不想荒廢(但事實上也沒有用到 Java)
找下一份工作的準備
好了,說完了那可以開始了!
Interface
何謂 interface ? interface 是一個指定 method 的集合,你想實作特定 interface 的類別(class),就要具備滿足 interface 的指定方法。
public interface Comparable<T>{
public int compareTo(T o);
}
這個例子中, interface 定義使用了一個型態變數 T, 這時的 Comparable
成為泛型,我們如果要實作這個 interface 的 class 就要做兩件事情:
- 指定 T
- 要實作一個叫做 compareTo 的 Method,而且要有一個物件做為參數,並回傳 int。如果 interface 定義多個 method,那就要全部實現喔!
好,那我們來實作這個 interface 的 class。
以 java.lang.Integer
為例子:
public final class Integer extends Number implemnets Comparable<Integer>{
public int compareTo(Integer anotherInteger){
int thisVal = this.value;
int anotherVal = anotherInteger.value;
return (thisVal < anotherVal ?: -1 : (thisVal==anotherVal ? 0 : 1));
}
}
Integer 他指定實作 Comparable,所以有實作 compareTo 這個方法,並且回傳一個 int。
List interface
List interface 有兩個實作,分別是 ArrayList 與 LinkedList,這個 interface 中有很多我們常用的方法,add
、get
等,ArrayList 與 LinkedList 兩個也具備了這些方法,所以他們可以互相替換使用。
public class ListClientExample {
private List list;
public ListClientExample(){
list = new LinkedList();
}
private List getList(){
return list;
}
public static void main(String[] args){
ListClientExample lce = new ListClientExample();
List list = lce.getList();
System.out.println(list);
}
}
我們在 ListClientExample
中封裝了 List,在他的建構子中建立一個新的 LinkedList,並將 list 實例化。
用來取得這個 list 的方法為 getList,他就是回傳一個 list。
這個範例中,我們盡可能地使用 list 這個類別,若非必要不去特別指定是 ArrayList 還是 LinkedList,這點可以由初始變數跟 getlist 的回傳值。
在這個地方,我們如果要把 LinkedList 改成 ArrayList,就改變建構子就好了。
當我們使用 lib,程式碼要盡可能使用 list 這種 interface,而不是使用 LinkedList 的實作,這樣未來改動程式碼會比較好修改,但反過來更改 interface 的話,相關程式碼就需要大量改動。
結論
好的,這又跟資料結構有什麼關係呢?因為後續會深入了解 ArrayList 與 LinkedList,還有演算法分析、排序法等等。
前面這個 interface 比較像是先試水溫,畢竟一開始就學 interface 是蠻特別的,不過之前學習 golang 時就已經了解過 interface,就再複習一次吧。