好的,所以我试图使用java优先级队列按照它们包含的双重值对节点进行排序。我知道如何通过double执行优先级队列,但我需要其余的节点值用于霍夫曼编码树构造。有没有办法按其val对节点的优先级队列进行排序,或者我最好让队列对双值进行排序,然后尝试将它们与节点进行匹配?
答案 0 :(得分:3)
您有两种选择,选择取决于Double
中Node
的含义:
Node
实施Comparable<Node>
,并使用PriorityQueue<Node>
。 compareTo
方法将按Double
排序。您想要的队列顺序是元素的自然顺序。PriorityQueue
参数的Comparator
构造函数。您用于队列的Comparator
应根据Double
值进行排序。如果Double
确实是节点的自然顺序,则第一个更好。第二个更好,如果它只对这个队列很重要,其他字段对于其他目的同样重要。
答案 1 :(得分:0)
您可以使用PriorityQueue
例如: 要按其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;
}
}
});