请原谅我,如果这是一个尝试过的问题,但我有点难以搞清楚.
我目前有一个类Node,每个’node’都是迷宫中的一个正方形.我正在尝试实现A *算法,因此每个节点都有一个f-cost(int)数据成员.我想知道是否有一种方法可以创建这些节点的优先级队列,并将f-cost变量设置为比较器?
我在网上看了一些例子,但我能找到的只是字符串优先级队列.我可以为Node类实现Comparator吗?这会允许我访问存储在其中的数据成员吗?
非常感谢!
解决方法
绝对.
您可以使用基于传递给构造函数的匿名Comparator的PriorityQueue:
int initCapacity = 10; PriorityQueue<Node> pq = new PriorityQueue<Node>(initCapacity,new Comparator<Node>() { public int compare(Node n1,Node n2) { // compare n1 and n2 } }); // use pq as you would use any PriorityQueue
如果您的Node类已经实现了Comparable,您甚至不需要定义新的Comparator,因为默认情况下将使用该顺序.除非采用任何其他方法,否则将使用对象之间的自然顺序.