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