我正在尝试学习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++;
}
答案 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接口的对象,并对这些对象的集合进行排序。