【问题标题】:Priority Queue <Double> vs Priority Queue <Node>优先队列 <Double> 与优先队列 <Node>
【发布时间】:2017-04-26 00:32:52
【问题描述】:

好的,所以我正在尝试使用 java 优先级队列按节点包含的双倍值对节点进行排序。我知道如何通过双倍执行优先级队列,但我需要其余的节点值来构建霍夫曼编码树。有没有办法按节点的 val 对节点的优先级队列进行排序,或者我最好让队列对双 val 进行排序,然后尝试将它们与节点匹配?

【问题讨论】:

  • 假设您在 Node 类中实现 Comparator&lt;Node&gt; 并进行排序。这个post 可能对你得到解决方案有帮助。

标签: java node.js double priority-queue comparator


【解决方案1】:

您有两个选择,选择取决于DoubleNode 中的含义:

  1. Node 实现Comparable&lt;Node&gt;,并使用PriorityQueue&lt;Node&gt;compareTo 方法将按Double 排序。您想要的队列顺序是元素的自然顺序。
  2. 使用带有Comparator 参数的PriorityQueue 构造函数。您用于队列的Comparator 应根据Double 值排序。

如果Double 确实是节点的自然顺序,则第一个更好。第二个更好,如果它只对这个队列很重要,而其他字段对其他用途同样重要。

【讨论】:

    【解决方案2】:

    您可以使用 PriorityQueue 实现并通过在队列构建期间重写 Comparator 接口的 compare 方法来管理元素的顺序。

    例如: 要按节点值的升序对元素进行排序,请使用下面提到的优先级队列声明,然后简单地将节点添加到优先级队列中。

    PriorityQueue<Node> pq = new PriorityQueue<Node>(new Comparator<Node>(){
       public int compare(Node node1, Node node2){
           if(node2.val>node1.val){
              return -1;
           }
           else{
              return 1;
           }
       }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-11
      • 2011-12-20
      • 1970-01-01
      • 2010-12-28
      • 2012-03-28
      • 2011-08-21
      • 2016-07-11
      • 1970-01-01
      相关资源
      最近更新 更多