簡體   English   中英

在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
    }

如果僅將節點添加到隊列中,我認為節點將以字母順序結束。 如何將比較器更改為頻率?

先感謝您。

將Comparator作為構造函數參數傳遞 ,例如

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM