我需要使用arraylist在java中实现我自己的通用二进制堆。它需要支持最大堆和最小堆。这应该通过将Comparator传递给BinaryHeap构造函数来实现。
所以我想根据传递的Comparator中的compare-method做什么,它可以是min或max堆。我以为我会制作一个普通的PQ(默认为最小值)然后编写一个扩展PQ的MaxPQ类并将比较器传递给超级构造函数。但是我需要在第一行调用super,所以我不知道在哪里初始化Comparator。有什么想法吗?
以下是MaxHeap的代码:
import java.util.Comparator;
public class MaxHeap<Bid> extends BinaryHeap<Bid> {
public MaxHeap(){
MaxComp maxComp = new MaxComp();
super(maxComp);
}
}
class MaxComp implements Comparator<Bid>{
public int compare(Bid a, Bid b){
return (a.val - b.val);
}
}
尝试了Dmitrys的建议super(new MaxComp());
,它产生了"BinaryHeap<Bid>(MaxComp) is undefined"
。这是带有比较器的超级构造函数:
public class BinaryHeap<E>{
private Comparator<? super E> comp;
private ArrayList<E> array;
private int last; // index of last element
public BinaryHeap(Comparator<? super E> comp){
this.comp = comp;
array = new ArrayList<E>();
}
答案 0 :(得分:1)
只需将其初始化如下:
super(new MaxComp());
此外,代替MaxHeap<Bid> extends ...
使用MaxHeap extends ...
,因为您已经指定了使用extends BinaryHeap<Bid>
的类型。这就是为什么你不能用super
调用Comparator
构造函数的原因。原因是使用Bid
中的通用类型class MaxHeap<Bid>
而不是实际的类Bid
。