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

时间:2016-03-09 16:15:29

标签: java tree

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

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
    }

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

提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

请注意,您并不真正想要使用的东西来命令节点是可变的,特别是如果它是公共的 - 如果您要更改频率值,它将不会自动重新排序队列。

您可以尽可能多地制作final字段。

相关问题