java中的键 - 优先级队列

时间:2011-10-16 23:34:47

标签: java priority-queue

我正在尝试学习java,我被这个例子难倒 - 我找不到关键是什么

public class OrderedArrayMaxPQ<Key extends Comparable<Key>> {
    private Key[] pq;          // elements

这是优先级队列的示例..我是从http://algs4.cs.princeton.edu/24pq/OrderedArrayMaxPQ.java.html得到的 我认为优先级队列应该有一个数据+一个优先级值。我不确定这些人是怎么做的。

public class OrderedArrayMaxPQ<Key extends Comparable<Key>> {
    private Key[] pq;          // elements
    private int N;             // number of elements

    // set inititial size of heap to hold size elements
    public OrderedArrayMaxPQ(int capacity) {
        pq = (Key[]) (new Comparable[capacity]);
        N = 0;
    }


    public boolean isEmpty() { return N == 0;  }
    public int size()        { return N;       } 
    public Key delMax()      { return pq[--N]; }

    public void insert(Key key) {
        int i = N-1;
        while (i >= 0 && less(key, pq[i])) {
            pq[i+1] = pq[i];
            i--;
        }
        pq[i+1] = key;
        N++;
    }

3 个答案:

答案 0 :(得分:2)

优先级通过Key接口在Comparable实现中实现。

在您链接的示例中,他们使用String个元素,因此优先级是String Comparable的实现。

如果你想实现一个数字优先级,你可以用你的类创建一个优先级队列,它将实现Comparable,比较优先级字段的数值。

答案 1 :(得分:1)

您不需要Key[],只需Comparable[]

答案 2 :(得分:1)

与其他人一样,专注于可比较的界面。了解java如何实现优先级队列的一个好方法是注意String,Integer,Float和其他类实现Comparator接口的事实。

这意味着,通过对象定义,它可以与相同类型的其他对象进行比较(&lt;,&gt;或=)。

我建议,而不是了解优先级队列,

1)使用像Vectors和TreeMaps这样的简单java数据结构的排序。 2)查看Collections API。编写一个程序,例如,使用Collections.sort对一些不同的列表进行排序 3)尝试编写一个实现Comparator接口的对象,并对这些对象的集合进行排序。