[英]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
}
如果僅將節點添加到隊列中,我認為節點將以字母順序結束。 如何將比較器更改為頻率?
先感謝您。
new PriorityQueue<>(
initialCapacity,
new Comparator<HuffNode>() {
@Override public int compare(HuffNode a, HuffNode b) {
return Integer.compare(a.frequency, b.frequency);
}
});
請注意,您實際上並不希望用來排序節點的變量是可變的,尤其是在公共節點上-如果要更改頻率值,它將不會在隊列中自動重新排序。
做final
字段盡可能多,這final
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.