为了账号安全,请及时绑定邮箱和手机立即绑定

普林斯顿大学算法课程二元堆程序中可比较接口(Java)的实现

普林斯顿大学算法课程二元堆程序中可比较接口(Java)的实现

qq_笑_17 2021-05-31 12:34:16
我没有使用大量的 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 具有的方法。


查看完整回答
反对 回复 2021-06-10
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

Key extends Comparable < Key >意味着仅Key实现 interface Comparable < Key >。而已。


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信