将 Double 转换为 Key(优先队列)

Convert Double to Key (Priority queue)

我一直在互联网上进行广泛的搜索,寻找某种类型的问题答案,但我没有找到任何可以帮助我的东西。基本上我想知道的是,是否有可能将双精度转换为然后插入到优先级队列中的键。

这是我苦苦挣扎的方法,来自文件名 MedianPQ.java。就是这个:

public void insert(Double a){
        if (size == 0 || a.compareTo(findMedian()) == 1) minPQ.insert(a);
        else maxPQ.insert(a);
        rearrange();
        size++;
    }

MinPQ.java 文件中的插入方法如下所示:

public void insert(Key x) {
        // double size of array if necessary
        if (n == pq.length - 1) resize(2 * pq.length);

        // add x, and percolate it up to maintain heap invariant
        pq[++n] = x;
        swim(n);
        assert isMinHeap();
    }

这里是 MaxPQ.java

的插入方法
public void insert(Key x) {

        // double size of array if necessary
        if (n == pq.length - 1) resize(2 * pq.length);

        // add x, and percolate it up to maintain heap invariant
        pq[++n] = x;
        swim(n);
        assert isMaxHeap();
    }

它们是相同的。现在问题出现了,因为不能更改 MedianPQ.java 中的 public void insert(Double a)。我必须接受一个 double,然后将那个 double 插入 PQ。但是 MinPQ.java and MaxPQ.java 中的方法只插入一个键。是否可以将双精度转换为 insert(Double a) 方法中的键???

您应该使用 Double 作为 MaxPQMinPQ 的通用名称。 为此,请尝试以下操作:

public static void main(String[] args) {
    MedianPQ<Double> median = new MedianPQ<Double>(10, 20);
    median.insert(1.1D);
    median.insert(2.2D);
}

private MaxPq<Double> left;
private MinPq<Double> right;

希望对您有所帮助。