Java 从 PriorityQueue 中找到的节点列表中获取最后一个元素

标签 java list arraylist nodes priority-queue

我在使用以下代码时遇到了问题:

问题代码:

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/

相关文章:

java - Jetty频繁超时异常

java - 数组/数据集构造函数问题

PHP:有没有一种简单的方法可以将数字列表(作为字符串,如 "1-3,5,7-9")解析为数组?

python - 如何对 python 说 (a+b) = (b+a) 和 (a*b) = (b*a)

尝试创建 CommonsHttpOAuthConsumer 时出现 java.lang.ClassNotFoundException : org. apache.commons.codec.binary.Base64

java - 无法连接到MSSQL数据库2012

python - 如何找到检查键值对的两个字典列表之间的差异

c++ - 程序只读取第一行! C++

java - 如何在Java中保存每个字段的变量查询结果?

java - 在 ArrayList 中插入不同的数组