2012-10-06 17 views
0

所以我对新的优先级队列感到陌生。在我试图实现的算法中,我想根据存储的节点的functionValue对优先级队列进行排序。我不明白优先级队列知道如何通过该值排序节点,而不是我的节点对象的其他八个实例变量之一。我很确定我定义了一个Comparator对象来定义比较/排序规则,但我无法为Comparator创建Oracle类库的正面或反面。试图通过其中一个存储节点的值对优先级队列进行排序

这里是我的节点类

public class Node{ 

public char label;  //Holds char for the Move used; U, D, L, R 
public boolean visited = false; 
public State nodeState; //Each node holds a State object 
int depth; 
int heuristicCount; 
int functionCount; <--- This is the property I want the priority queue to sort by. 
. 
. 
. 

回答

1

Comparator的性能是一个非常简单的接口。你有什么困难?关键是compare method。你只需实现它来比较你的类的两个实例。例如:

public class NodeComparator implements Comparator<Node> { 
    public int compare(Node a, Node b) { 
     Integer aCount = a.getFunctionCount(); 
     Integer bCount = b.getFunctionCount(); 
     return a.compareTo(b); 
    } 
} 
+0

对不起,这种接口的想法对我来说是新的;我想我来自一个相当原始的背景。感谢您的帮助! – Gthoma2

+1

不用担心。如果您是从有背景函数指针的背景出发,那么知道在Java中经常使用的接口在功能指针将以其他语言使用的相同位置可能会很有用。例如,这里使用的比较器与[qsort]的“compar”参数完全相同(http://pubs.opengroup.org/onlinepubs/009695399/functions/qsort.html)。 Java 8甚至会包含一些新的功能,使某些接口的行为与函数指针几乎完全相同。 –