将Comparator传递给超级构造函数

时间:2014-11-13 10:16:01

标签: java comparator

我需要使用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>();
    }  

1 个答案:

答案 0 :(得分:1)

只需将其初始化如下:

super(new MaxComp());

此外,代替MaxHeap<Bid> extends ...使用MaxHeap extends ...,因为您已经指定了使用extends BinaryHeap<Bid>的类型。这就是为什么你不能用super调用Comparator构造函数的原因。原因是使用Bid中的通用类型class MaxHeap<Bid>而不是实际的类Bid