Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java比较器的实现_Java_Implementation_Priority Queue_Comparator - Fatal编程技术网

Java比较器的实现

Java比较器的实现,java,implementation,priority-queue,comparator,Java,Implementation,Priority Queue,Comparator,我正试图编写一个利用最小优先级队列的算法,所以我在google上搜索了一下,找到了PriorityQueue。但是,为了使用它,我需要告诉它我希望它如何划分优先级,实现这一点的方法是使用一个比较器(我想比较我的“Node1”对象的特定数据字段)。更多的谷歌提出了创建一个新的比较器的想法,它实现了比较器,但覆盖了compare方法。我尝试的是(以及它的其他变体): import java.util.Comparator; 公共类distComparator实现Comparator{ @凌驾 公共整

我正试图编写一个利用最小优先级队列的算法,所以我在google上搜索了一下,找到了PriorityQueue。但是,为了使用它,我需要告诉它我希望它如何划分优先级,实现这一点的方法是使用一个比较器(我想比较我的“Node1”对象的特定数据字段)。更多的谷歌提出了创建一个新的比较器的想法,它实现了比较器,但覆盖了compare方法。我尝试的是(以及它的其他变体):

import java.util.Comparator;
公共类distComparator实现Comparator{
@凌驾
公共整数比较(节点1 x,节点1 y){
如果(x距离){
返回1;
}
返回0;
}
}
编译器基于几个理由提出抗议,其中之一是我没有过度使用comparator类(它说它是抽象的)

错误:distComparator不是抽象的,并且不重写Comparator中的抽象方法比较(对象,对象)

我把它改成了“比较(对象x,对象y)”,它解决了这个问题。此时,尽管编译器抱怨在x或y中找不到“dist”变量——这是有道理的,因为它们是Node1类的一部分,而不是Object类


那么这是怎么回事?显然,它应该有类型
Object
,但是我如何将它指向正确的变量呢?

您需要实现
比较器

(根据
Node1.dist
的类型,将
Integer
替换为
Double
等)

如您所见,
比较器
接口有一个通用的“参数” 描述类型 这个比较器就是为它设计的。 这一点是相似的

所以, 如果创建一个
优先队列
, 您可以创建一个比较器,如下所示:

public class distComparator implements Comparator<Node1> {    
    @Override
    public int compare(Node1 x, Node1 y){
        return x.dist - y.dist;
    }
}
公共类distComparator实现Comparator{
@凌驾
公共整数比较(节点1 x,节点1 y){
返回x.dist-y.dist;
}
}

您也可以编写
返回x.dist-y.dist
@polygenome:根据涉及的范围,这可能适用于整数,也可能不适用于整数,但对于浮点值来说,这是完全不可能的。请使用
而不是
[]
public class distComparator implements Comparator<Node1> {
                                                 ^^^^^^^
return Integer.compare(x.dist, y.dist);
public class distComparator implements Comparator<Node1> {    
    @Override
    public int compare(Node1 x, Node1 y){
        return x.dist - y.dist;
    }
}