我没有使用大量的 Java 进行编程,因此我只是对该语言有基本的了解。我正在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,当它覆盖compareTo可比较接口中的默认方法时。现在,我明白可比是java.lang. 在定义MaxPQ类时,使用的泛型类型是:public class MaxPQ < Key extends Comparable < Key > >由于Comparable是一个接口,并Key扩展了该接口,这意味着它key也必须是一个接口。现在我不明白这是如何工作的。有人可以向我解释一下,如果接口充当泛型类型会有什么好处,以及为什么Key需要扩展Comparable<Key>.如果您还可以给我一个如何Key定义的示例(使用Comparable接口),那将非常有帮助。
2 回答
HUH函数
TA贡献1836条经验 获得超4个赞
你缺少的是理解
<Key extends Comparable<Key>>
这并不意味着 Key 是接口......这意味着 Key 是 Comparable 的子类,可以这样对待。
Comparable<Key> c = new Key();
最后,Key 是实现接口 Comparable 还是扩展类 Comparable 并不重要,因为在这两种情况下,它都可以充当 Comparable - 并且具有 Comparable 具有的方法。
添加回答
举报
0/150
提交
取消