我沒有使用大量的 Java 進(jìn)行編程,因此我只是對該語言有基本的了解。我正在coursera 上做算法課程。本課程給出的二叉堆的程序是:public class MaxPQ<Key extends Comparable<Key>>{ private Key[] pq; private int N; public MaxPQ(int capacity) { pq = (Key[]) new Comparable(capacity + 1); } public boolean isEmpty() { return N==0;} public void insert(Key key) { pq[++N] = x; swim(N);} private void swim(int k) { while(k>1 && less(k/2,k)) { exch(k,k/2); k=k/2; } } public key delMax() { Key max = pq[1]; exch(1,N--); sink(1); pq[N+1] = null; //To prevent loitering. return max; } private void sink(int k) { while(2*k<=N){ int j= 2*k; if(j<N && less(j,j+1))j++; if(!less(k,j)) break; exch(k,j); k=j;} } private boolean less(int i, int j) { return pq[i].compareTo(pq[j])>0; } private void exch(int i, int j) { Key t = pq[i]; pq[i] = pq[j]; pq[j] = t; }compareTo()方法將在類的定義中定義Key,當(dāng)它覆蓋compareTo可比較接口中的默認(rèn)方法時?,F(xiàn)在,我明白可比是java.lang. 在定義MaxPQ類時,使用的泛型類型是:public class MaxPQ < Key extends Comparable < Key > >由于Comparable是一個接口,并Key擴展了該接口,這意味著它key也必須是一個接口。現(xiàn)在我不明白這是如何工作的。有人可以向我解釋一下,如果接口充當(dāng)泛型類型會有什么好處,以及為什么Key需要擴展Comparable<Key>.如果您還可以給我一個如何Key定義的示例(使用Comparable接口),那將非常有幫助。
2 回答

HUH函數(shù)
TA貢獻(xiàn)1836條經(jīng)驗 獲得超4個贊
你缺少的是理解
<Key extends Comparable<Key>>
這并不意味著 Key 是接口......這意味著 Key 是 Comparable 的子類,可以這樣對待。
Comparable<Key> c = new Key();
最后,Key 是實現(xiàn)接口 Comparable 還是擴展類 Comparable 并不重要,因為在這兩種情況下,它都可以充當(dāng) Comparable - 并且具有 Comparable 具有的方法。

喵喵時光機
TA貢獻(xiàn)1846條經(jīng)驗 獲得超7個贊
Key extends Comparable < Key >
意味著僅Key
實現(xiàn) interface Comparable < Key >
。而已。
添加回答
舉報
0/150
提交
取消