java - 包含函数链表

标签 java linked-list overriding priority-queue

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;

我需要检查任何 openNodeclosedPoint 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/

相关文章:

Java - 从服务器获取日志文件

java - 无法从 okhttp 导入请求和响应类

java - 设置值链表节点Java

java - 在链表中插入节点的逻辑错误(Java)

Python:如何重用基本方法,同时允许方法内修改?

java - 使用 instanceof 和 HashMap 执行双重命令

Java替换 ' " 'character with '\"'

c - 使用递归在C中反向链表

c# - 为一些(但不是所有)继承类引入 setter

Django Admin - 覆盖自定义表单字段的小部件