在 Java 中为 PriorityQueue(node) 设置比较器

setting a comparator for PriorityQueue(node) in Java

如果我有一个包含两个数据变量的节点。

class HuffNode{
public char iData;
public int frequency;
public HuffNode leftChild;
public HuffNode rightChild;
// ---------------------------------------------------------
HuffNode(char d){
    this.iData = d;
    this.frequency = 0;
}
}

然后,我想按每个节点的频率将它们按升序排列成优先级队列。

PriorityQueue<HuffNode> q = new PriorityQueue<HuffNode>();
    Set<Character>keys = map.keySet(); //iterator
    Iterator<Character> it = keys.iterator();
    while(it.hasNext()){
        char key = it.next();
        HuffNode node = new HuffNode(key);
        node.frequency = map.get(key);
        q.add()// want to add by frequency
    }

如果我只是将节点添加到队列中,我认为节点将按字母顺序结束。如何将比较器更改为频率?

提前致谢。

Pass a Comparator as a constructor parameter,例如

new PriorityQueue<>(
    initialCapacity,
    new Comparator<HuffNode>() {
      @Override public int compare(HuffNode a, HuffNode b) {
        return Integer.compare(a.frequency, b.frequency);
      }
    });

请注意,您并不真的希望您用来对节点进行排序的东西是可变的,尤其是如果它是 public - 如果您要更改频率值,它不会自动在队列中重新排序。

尽可能多地创建字段,你会得到很好的服务final