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

我没有使用大量的 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接口),那将非常有帮助。


qq_笑_17
浏览 118回答 2
2回答

HUH函数

你缺少的是理解<Key&nbsp;extends&nbsp;Comparable<Key>>这并不意味着 Key 是接口......这意味着 Key 是 Comparable 的子类,可以这样对待。Comparable<Key>&nbsp;c&nbsp;=&nbsp;new&nbsp;Key();最后,Key 是实现接口 Comparable 还是扩展类 Comparable 并不重要,因为在这两种情况下,它都可以充当 Comparable - 并且具有 Comparable 具有的方法。

喵喵时光机

Key extends Comparable < Key >意味着仅Key实现 interface&nbsp;Comparable < Key >。而已。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java