public class state implements Comparator<state>{
Point a;
Point b;
private int path_cost=0;
...
}
class Point {
int x;
int y;
...
}
以上我有:
PriorityQueue<state> openNode= new PriorityQueue<state>();
LinkedList<state> closed =new LinkedList<state>();
state currNode;
我需要检查任何 openNode
或 closed
的 Point a
是否等于 currNode
的 点a
。
如果我必须匹配整个对象,我可以使用 contains
但在这里我只关心状态类的一个变量(点 a)。我希望该方法检查 PriorityQueue 和 LinkedList 中的所有节点。
添加: 我正在考虑在我的 priorityQueue 和 LinkedList 上使用 Iterator。但我不确定如何使用 Iterator 读取 Point a 的值。
最佳答案
编辑:看起来我有点误解了。它比我想象的要简单。
// I've assumed more conventional names
Point currPoint = currNode.getPointA();
for (State openNode : openNodes) {
if (openNode.getPointA().equals(currPoint)) {
return true;
}
}
for (State closedNode : closedNodes) {
if (closedNode.getPointA().equals(currPoint)) {
return true;
}
}
// No matching points
return false;
您可以使用 Guava 的 Iterables.concat()
方法来稍微简化一下:
for (State node : Iterables.concat(closedNodes, openNodes)) {
if (node.getPointA().equals(currPoint)) {
return true;
}
}
return false;
如果您需要知道哪个节点具有相等的点 A,只需将其更改为:
for (State node : Iterables.concat(closedNodes, openNodes)) {
if (node.getPointA().equals(currPoint)) {
return node;
}
}
return null;
那只会找到一个这样的节点,当然 - 可能有多个匹配项。
关于java - 包含函数链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550446/