PriorityQueue Poll的功能是什么?

问题描述 投票:0回答:1

[我研究Java中的树搜索算法,并测试了“ Node”的两个实现:

  • 第一个有一个ArrayList,其中包含所有为避免某些计算而交叉的Parents(它可以包含1到1000个节点)。
public class Node implements Comparable {
    private Node parent;
    private int city;
    private int pathValue;
    private int score;
    private ArrayList<Integer> crossedCities;

    ...
  • 第二个没有ArrayList。
public class Node implements Comparable {
    private Node parent;
    private int city;
    private int pathValue;
    private int score;

    ...
}

然后,在BeamSearch中,我将节点存储在名为“ allNodes”的PriorityQueue中,我选择了所有“ maxNode”最佳节点,并将它们存储在另一个称为“ bestNodes”的PriorityQueue中。]

    int i = 0;
    while (i < maxNode) {
        Node bestNode = allNodes.poll();
        bestNodes.add(bestNode);
        i++;
    }

为了测试是否有必要将所有的Parents存储在ArrayList中,我测量了Node的两种实现在同一实例上的时间。

经过一些测试后,唯一导致计算时间不同的行是行Node bestNode = allNodes.poll();

结果如下:

  • 对于实现with

    ArrayList,行Node bestNode = allNodes.poll();花费0.496s(总计:2.456s)。
  • 对于实现without

  • ArrayList,行Node bestNode = allNodes.poll();需要4.622s(总计:7.256s)。

    我更喜欢注意到,其余所有代码都是完全相同的。仅Node的实现有所不同。

这是我的问题

:轮询功能如何花10倍的时间轮询(非常)小的对象?导致此情况的确切实现是什么?

[我研究Java中的树搜索算法,并测试了“ Node”的两个实现:第一个有一个ArrayList,其中包含所有为避免某些计算而交叉的Parents(它可以包含1到...

java priority-queue
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.