实现Java Comparator
我正在尝试编写一个利用最小优先级队列的算法,所以我环顾谷歌并找到了PriorityQueue。 看来,为了使用它,我需要告诉它我希望它如何优先排序,并且这样做的方法是使用比较器(我想比较我的“Node1”的特定数据字段)对象)。 更多的谷歌搜索提出了创建一个新的比较器的想法,该比较器实现了比较器但覆盖了比较方法。 我正在尝试的是这个(以及它的其他变体):
import java.util.Comparator; public class distComparator implements Comparator { @Override public int compare(Node1 x, Node1 y){ if(x.disty.dist){ return 1; } return 0; } }
编译器有几个理由抗议,其中一个原因是我没有超越比较器类(它说它是抽象的)
错误:distComparator不是抽象的,并且不会覆盖Comparator中的抽象方法compare(Object,Object)
我已将其切换为“比较(对象x,对象y)”,它负责处理该问题。 此时虽然编译器抱怨它无法在x或y中找到“dist”变量 – 这是有道理的,因为它们是我的Node1类的一部分,而不是Object类。
那怎么能起作用呢? 它显然应该有Object
类型,但是如何将它引导到正确的变量?
您需要实现Comparator
:
public class distComparator implements Comparator { ^^^^^^^
如果没有这个,你正在实现Comparator
,这不是你想要的(它可以使它工作,但不值得麻烦)。
如果Node1
有一个名为dist
的可访问成员,那么你问题中的其余代码就可以了。
请注意,如果您使用的是Java 7,则可以替换该方法的整个主体
return Integer.compare(x.dist, y.dist);
(将Integer
替换为Double
等,具体取决于Node1.dist
的类型。)
正如您在此处所见(JSE Comparator JavaDoc页面) , Comparator
接口具有一个通用的“参数”,用于描述此比较器的设计类型。 PriorityQueue类似。
因此,如果您创建PriorityQueue
,则可以按如下方式创建Comparator
:
public class distComparator implements Comparator { @Override public int compare(Node1 x, Node1 y){ return x.dist - y.dist; } }