簡體   English   中英

接口與實施隊列

[英]Interface versus implementing Queue

隊列是實現許多不同類的接口。 我很困惑為什么我的課本使用Queue給出了此示例文本。 我在普林斯頓大學的一個例子中也發現了這一點。 這是提供代碼的慣用方式,以便以后可以編輯為程序員喜歡的隊列類型嗎?

這是取自二進制搜索符號表算法的代碼。

public Iterable<Key> keys(Key lo, Key hi) {
    Queue<Key> q = new Queue<Key>();
    for (int i = rank(lo); i < rank(hi); i++) {
        q.enqueue(keys[i]);
    }
    if (contains(hi)) {
        q.enqueue(keys[rank(hi)]);
    }
    return q;
}

因此,首先, there are many classes that implement Queue而不是Queue is an interface that implements many different classes

其次,是的代碼約定是,在需要其他實現的情況下,請盡可能使用interface使代碼更靈活。 對於方法簽名尤其如此,但對於變量和字段聲明也是良好的做法。

第三,看起來像錯字。 行應為Queue<Key> q = new LinkedList<Key>();

請參見此處的答案: 為什么在Java中使用接口名稱聲明變量?

另外, “編程到接口”是什么意思?

我經常對其他接口執行此操作,這些接口的特定實現在接口上不提供任何內容,例如List

List<String> strings = new ArrayList<>();

在這種情況下,我將以最少的麻煩保留最大的靈活性。

當然,您不會經常更改實現,但是有一些特定的實現,例如插入需要O(n)時間,而查找則需要O(log n)時間,反之亦然,在這種情況下,您必須進行一些研究您正在使用該界面。

您是否對收藏集的內容進行了很多更改,但還是很少閱讀? 還是反過來,您插入一次並經常閱讀嗎?

您的問題非常廣泛。 這項技術稱為“接口編程”,它是多年收集良好編碼實踐的結果。 它以多種方式使事情變得容易。 它徹底改變了我們今天編寫軟件的方式。 如果您是一個渴望學習的人,並且想了解更多,請首先閱讀本文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM