gpt4 book ai didi

java - 将比较器传递给 super 构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:57 26 4
gpt4 key购买 nike

我需要使用数组列表在java中实现我自己的通用二进制堆。它需要支持最大堆和最小堆。这应该通过将 Comparator 传递给 BinaryHeap 构造函数来实现。

所以我猜想根据传递的比较器中的比较方法的作用,它是最小堆或最大堆。我想我应该制作一个常规的 PQ (默认为最小值),然后编写一个扩展 PQ 的 MaxPQ 类并将比较器传递给 super 构造函数。但我需要在第一行调用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);
}

}

尝试过德米特里的建议 super(new MaxComp()); ,产生 "BinaryHeap<Bid>(MaxComp) is undefined" 。这是带有比较器的 super 构造函数:

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>();
}

最佳答案

只需按如下方式初始化它:

super(new MaxComp());

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

关于java - 将比较器传递给 super 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com