好的,所以我尝试使用java优先级队列来根据节点包含的双精度val对节点进行排序。我知道如何做一个双优先级队列,但我需要其余的节点值来构建霍夫曼编码树。有没有办法根据节点的值对优先级队列进行排序,或者让队列对双精度值进行排序,然后尝试将它们与节点进行匹配会更好?
发布于 2017-04-26 08:47:48
您有两个选项,选择取决于Double在Node中的含义
Node实现Comparable<Node>,并使用PriorityQueue<Node>。compareTo方法将按Double排序。您想要的队列顺序是元素的自然顺序。Comparator参数的PriorityQueue构造函数。用于队列的Comparator应根据Double值排序。如果Double确实是节点的自然顺序,则第一种方法更好。如果第二个字段仅对此队列重要,并且其他字段对于其他目的也同样重要,则第二个字段更好。
发布于 2019-04-15 18:14:07
您可以使用PriorityQueue实现,并在队列构造期间通过覆盖比较器接口的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;
}
}
});https://stackoverflow.com/questions/43623060
复制相似问题