当前位置: 首页 > 面试题库 >

实施Java比较器

夹谷信鸿
2023-03-14
问题内容

我正在尝试编写一种利用最小优先级队列的html" target="_blank">算法,因此我在Google上四处查看,发现了PriorityQueue。不过,似乎要使用它,我将需要告诉它我如何确定优先级,并且这样做的方法是使用比较器(我想比较“
Node1”的特定数据字段)对象)。更多的谷歌搜索提出了创建一个新的比较器的想法,该比较器实现了Comparator但覆盖了compare方法。我正在尝试的是这个(以及它的其他变体):

import java.util.Comparator;

public class distComparator implements Comparator {

    @Override
    public int compare(Node1 x, Node1 y){
        if(x.dist<y.dist){
            return -1;
        }
        if(x.dist>y.dist){
            return 1;
        }
        return 0;
    }
}

编译器出于多种原因提出抗议,其中之一是我没有重写比较器类(它说是抽象的)

错误:distComparator不是抽象的,并且没有覆盖Comparator中的抽象方法compare(Object,Object)

我将其改为“ compare(object x,object y)”,它可以解决该问题。此时,尽管编译器抱怨它无法在x或y中找到“ dist”变量-
这很有意义,因为它们是我的Node1类的一部分,而不是Object类的一部分。

那么这应该如何工作?它应该具有type Object,显然是,但是如何将其定向到正确的变量?


问题答案:

您需要实现Comparator<Node1>

public class distComparator implements Comparator<Node1> {
                                                 ^^^^^^^

没有这个,您将实现Comparator<Object>,这不是您想要的(可以使它工作,但不值得麻烦)。

您的问题中的其余代码都很好,只要Node1有一个名为的可访问成员dist

请注意,如果您使用的是Java 7,则可以将方法的整个主体替换为

return Integer.compare(x.dist, y.dist);

(替换IntegerDouble等,取决于类型Node1.dist。)



 类似资料:
  • 我正在尝试编写一个使用最小优先级队列的算法,所以我在谷歌上四处查看并找到了PriorityQueue。不过,似乎为了使用它,我需要告诉它我希望它如何排列优先级,并且这样做的方法是使用比较器(我想比较我的“Node1”对象的特定数据字段)。更多的谷歌搜索提出了创建一个新的比较器的想法,它实现了比较器但覆盖了比较方法。我正在尝试的是这样(以及它的其他变体): 编译器有几个理由提出抗议,其中之一是我没有

  • 我对collection.sort()方法有一些问题。 Java . lang . illegalargumentexception:比较法违反了它的通用契约! 位于Java . util . Tim sort . merge lo(Tim sort . Java:747) at java.util.TimSort.mergeAt(TimSort.java:483) 位于java.util.Tim

  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s

  • 问题内容: 假设我有一对班 我希望先按第一个值排序,然后再按第二个值排序。现在,如果我这样做 一切正常,列表按对的第一个值排序,但是如果我这样做 它因错误而失败 好的,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它对compare()而不是compare()。thenComparing()有效? 问题答案: 该错误似乎与的通用参数有关。一种解决方法是尝试使用显式类型: 请注意,

  • 本文向大家介绍Java Comparator比较器实例解析,包括了Java Comparator比较器实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java Comparator比较器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 说几点需要注意的,提醒自己即可: 以下是单独定义一个比较器的类,实现了Comparat