优先级队列<double> vs Priority Queue <node>

时间:2017-04-26 00:32:52

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

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

2 个答案:

答案 0 :(得分:3)

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

  1. Node实施Comparable<Node>,并使用PriorityQueue<Node>compareTo方法将按Double排序。您想要的队列顺序是元素的自然顺序。
  2. 使用带有PriorityQueue参数的Comparator构造函数。您用于队列的Comparator应根据Double值进行排序。
  3. 如果Double确实是节点的自然顺序,则第一个更好。第二个更好,如果它只对这个队列很重要,其他字段对于其他目的同样重要。

答案 1 :(得分:0)

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

例如:  要按其Node值的升序对元素进行排序,请使用下面提到的优先级队列声明,然后只需将节点添加到优先级队列即可。

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;
       }
   }
});