我在使用以下代码时遇到了问题:
问题代码:
Node lastPeek=pq.peek();
tempList3.add(lastPeek.n1.get(n1.size()-1));
其中pq是一个PriorityQueue(存储Node类型的对象(参见下面的Node类),包含List<Node>
和double类型的对象)。 PriorityQueue 的声明方式如下:
Comparator<Node> comparator= new CostComparator();
//creation of priority queue of type Node
PriorityQueue<Node> pq=new PriorityQueue<Node>(comparator);
tempList3(来自问题代码部分)是一个具有以下声明的 ArrayList:
List<Node> tempList3=new ArrayList<Node>();
以下是 Node 类的一部分:
public int dest;
public Node next;
public Node parent;
double cost=0;
List<Node> n1=new ArrayList<Node>();
public Node(int d) {
dest = d;
next = null;
parent = null;
}
//used for storing objects into PriorityQueue pq
public Node(List<Node> n, double icost) {
n1=n;
cost=icost;
}
如描述为“问题代码”的代码部分所示,我一直在尝试对 <Node>
类型的 PriorityQueue pq 执行 peek() 操作。并将值存储在 Node 类型的 lastPeek 中。当我尝试使用 .n1.get(n1.size()-1) 获取列表值中的最后一个节点时,问题出现了,因为 n1.size() 未被识别。
我收到错误
cannot find symbol- variable n1
在 .get(n1.size()-1) 部分。我的主要目标是使用 PriorityQueue pq 获取第一个元素,然后获取第一个元素的 List 部分,这样我就可以获取 List 中的最后一个 Node 值(这就是我一直尝试使用 .get(n1 .size()-1) )。 PriorityQueue 中的元素存储在以下结构中:
Node n=new Node(List<Node> , double);
最佳答案
每次使用时,您都需要将 n1 推迟到 lastPeek,如下所示:
tempList3.add(lastPeek.n1.get(lastPeek.n1.size()-1));
关于Java 从 PriorityQueue 中找到的节点列表中获取最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442222/