当前位置: 首页 > 知识库问答 >
问题:

将比较器传递给超级构造函数

何涵衍
2023-03-14

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

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 (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个答案

慕容坚
2023-03-14

只需像下面这样初始化它:

super(new MaxComp());

另外,不要使用maxheap extends... ,而要使用maxheap extends...,因为您已经指定了要使用的类型extendsbinaryheap 。这就是为什么不能用比较器调用超级构造函数。原因是使用了类maxheap 中的泛型类型bid而不是实际类bid

 类似资料:
  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>

  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出:

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 有人能告诉我为什么我们需要将道具传递给构造函数()和super()。我读了很多关于这方面的问题,也读了很多文章。所有人都说你应该把道具传给构造函数和super,这样你就可以访问这个道具了。。。。。 如果我不将道具传递给构造函数或super,我的所有代码仍然可以工作。我看不出这会有什么变化。除非我想控制台记录this.props,这可以通过控制台记录来实现。 另一方面,我与一半的开发人员交谈过,他们

  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?