实现Java Comparator

Jo.*_*o.P 15 java implementation priority-queue comparator

我正在尝试编写一个利用最小优先级队列的算法,所以我在谷歌上环顾四周找到了PriorityQueue.看来,为了使用它,我需要告诉它我希望它如何优先排序,并且这样做的方法是使用比较器(我想比较我的"Node1"的特定数据字段)对象).更多的谷歌搜索提出了创建一个新比较器的想法,该比较器实现了比较器,但覆盖了比较方法.我正在尝试的是这个(以及它的其他变体):

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器有几个理由抗议,其中一个原因是我没有超越比较器类(它说它是抽象的)

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

我已将其切换为"比较(对象x,对象y)",它负责该问题.此时虽然编译器抱怨它无法在x或y中找到"dist"变量 - 这是有道理的,因为它们是我的Node1类的一部分,而不是Object类.

那应该怎么做呢?它Object显然应该有类型,但是如何将它引导到正确的变量?

NPE*_*NPE 18

你需要实现Comparator<Node1>:

public class distComparator implements Comparator<Node1> {
                                                 ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

没有这个,你正在实施Comparator<Object>,这不是你想要的(可以使它工作,但不值得麻烦).

您的问题中的其余代码很好,只要Node1有一个可访问的成员调用dist.

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

return Integer.compare(x.dist, y.dist);
Run Code Online (Sandbox Code Playgroud)

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