PriorityQueue.toString要素の順序が間違っています

loolooo:

優先度の頻度が最も低いノードを使用してJavaで優先度キューを作成しようとしています。ただし、コンパレータが機能せず、出力が非常に変です。コンパレータを変更する必要があると思いますが、変更方法がわかりません。これが私のコードです:

public class HuffmanComparator implements Comparator<TreeNodeHuffman> {
    public int compare(TreeNodeHuffman p1, TreeNodeHuffman p2) {
        if (p1.frequency < p2.frequency) return -1;
        if (p1.frequency > p2.frequency) return 1;
        return 0;
    }    
}

public class TreeNodeHuffman {
public static void main(String[] args) {    
    HuffmanComparator compare = new HuffmanComparator();
    TreeNodeHuffman e = new TreeNodeHuffman('e', 12702);
    TreeNodeHuffman t = new TreeNodeHuffman('t', 9056);
    TreeNodeHuffman a = new TreeNodeHuffman('a', 8167);
    TreeNodeHuffman o = new TreeNodeHuffman('o', 7507);
    TreeNodeHuffman i = new TreeNodeHuffman('i', 6966);
    TreeNodeHuffman n = new TreeNodeHuffman('a', 6749);
    TreeNodeHuffman s = new TreeNodeHuffman('s', 6327);
    TreeNodeHuffman h = new TreeNodeHuffman('h', 6094);
    TreeNodeHuffman r = new TreeNodeHuffman('r', 5987);
    TreeNodeHuffman d = new TreeNodeHuffman('d', 4253);
    TreeNodeHuffman l = new TreeNodeHuffman('l', 4025);
    TreeNodeHuffman c = new TreeNodeHuffman('c', 2782);
    TreeNodeHuffman u = new TreeNodeHuffman('u', 2758);
    TreeNodeHuffman m = new TreeNodeHuffman('m', 2406);
    TreeNodeHuffman w = new TreeNodeHuffman('w', 2360);
    TreeNodeHuffman f = new TreeNodeHuffman('f', 2228);
    TreeNodeHuffman g = new TreeNodeHuffman('g', 2015);
    TreeNodeHuffman y = new TreeNodeHuffman('y', 1974);
    TreeNodeHuffman p = new TreeNodeHuffman('p', 1929);
    TreeNodeHuffman b = new TreeNodeHuffman('b', 1492);
    TreeNodeHuffman v = new TreeNodeHuffman('v', 978);
    TreeNodeHuffman k = new TreeNodeHuffman('k', 772);
    TreeNodeHuffman j = new TreeNodeHuffman('j', 153);
    TreeNodeHuffman x = new TreeNodeHuffman('x', 150);
    TreeNodeHuffman q = new TreeNodeHuffman('q', 95);
    TreeNodeHuffman z = new TreeNodeHuffman('z', 74);
    PriorityQueue<TreeNodeHuffman> queue = new PriorityQueue<TreeNodeHuffman>(26, compare);
    queue.add(e);
    queue.add(t);
    queue.add(a);
    queue.add(o);
    queue.add(i);
    queue.add(n);
    queue.add(s);
    queue.add(h);
    queue.add(r);
    queue.add(d);
    queue.add(l);
    queue.add(c);
    queue.add(u);
    queue.add(m);
    queue.add(w);
    queue.add(f);
    queue.add(g);
    queue.add(y);
    queue.add(p);
    queue.add(b);
    queue.add(v);
    queue.add(k);
    queue.add(j);
    queue.add(x);
    queue.add(q);
    queue.add(z);
    System.out.println(queue);
}
}

出力は次のとおりです。[z、k、q、g、v、x、u、d、f、y、b、m、j、i、c、e、s、o、w、a、r、h 、p、t、l、a]。ただし、出力は[z、q、x、j、k、v、b ........]である必要があります。前もって感謝します!

Thomas Jungblut:

PriorityQueue1つずつアイテムをポーリングする必要があります。toStringそれはしません。

だからあなたの代わりにSystem.out.println(queue);これをする:

while(!queue.isEmpty()) {
   System.out.println(queue.poll());
}

その理由は、PriorityQueue内部で完全に並べ替えられることは決してないためです。詳細については、ヒープの動作を調べてください。そこから項目をポーリングすると、呼び出し中のヒープが修正されるため、要素がソートされた順序で出力されるはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PriorityQueueの順序の問題

分類Dev

PriorityQueue要素は順序付けられていません

分類Dev

priorityQueueをmax priorityqueueに変更します

分類Dev

要素を削除すると、PriorityQueueの順序が変更されます

分類Dev

Java:PriorityQueueの初期化

分類Dev

Maxheapとpriorityqueueの混乱

分類Dev

PriorityQueueは自然な順序を維持していますか?

分類Dev

`PriorityQueue`はタプルの順序を尊重しますか?

分類Dev

BFS:PriorityQueueが空にならない

分類Dev

Microsoftの内部PriorityQueue <T>のバグ?

分類Dev

Javaのpriorityqueueのコンパレータ

分類Dev

PriorityQueueを反復する方法は?

分類Dev

Java PriorityQueueを最大PQに変更する

分類Dev

ggplotbarplotのy軸の順序が間違っています

分類Dev

PythonのheapqとPriorityQueueの違いは何ですか?

分類Dev

Postgresの順序が間違っています

分類Dev

jQuery prepend()とJSONの順序が間違っています

分類Dev

要素の優先度が変わったときにJava PriorityQueueを更新する

分類Dev

Java-重複した挿入順序を維持するPriorityQueueの代替

分類Dev

Set <E>をString []にカバーすると、要素の順序が間違ってしまいます

分類Dev

O(1)スペースのPriorityQueueの降順で出力する方法

分類Dev

PriorityQueue内の要素の優先度を変更する

分類Dev

PriorityQueue内の要素の優先度を変更する

分類Dev

PriorityQueue add Elementは要素を変更します、奇妙なバグ

分類Dev

PriorityQueueはソートされていますが、2つが最大です

分類Dev

キーでPriorityQueueの要素を検索する

分類Dev

PriorityQueueは、最後に追加された要素を削除しています(lifoのように機能します)

分類Dev

MariaDBの順序は間違っていますが、MySQLでは正しい

分類Dev

ラテックスの参照番号の順序が間違っています

Related 関連記事

  1. 1

    PriorityQueueの順序の問題

  2. 2

    PriorityQueue要素は順序付けられていません

  3. 3

    priorityQueueをmax priorityqueueに変更します

  4. 4

    要素を削除すると、PriorityQueueの順序が変更されます

  5. 5

    Java:PriorityQueueの初期化

  6. 6

    Maxheapとpriorityqueueの混乱

  7. 7

    PriorityQueueは自然な順序を維持していますか?

  8. 8

    `PriorityQueue`はタプルの順序を尊重しますか?

  9. 9

    BFS:PriorityQueueが空にならない

  10. 10

    Microsoftの内部PriorityQueue <T>のバグ?

  11. 11

    Javaのpriorityqueueのコンパレータ

  12. 12

    PriorityQueueを反復する方法は?

  13. 13

    Java PriorityQueueを最大PQに変更する

  14. 14

    ggplotbarplotのy軸の順序が間違っています

  15. 15

    PythonのheapqとPriorityQueueの違いは何ですか?

  16. 16

    Postgresの順序が間違っています

  17. 17

    jQuery prepend()とJSONの順序が間違っています

  18. 18

    要素の優先度が変わったときにJava PriorityQueueを更新する

  19. 19

    Java-重複した挿入順序を維持するPriorityQueueの代替

  20. 20

    Set <E>をString []にカバーすると、要素の順序が間違ってしまいます

  21. 21

    O(1)スペースのPriorityQueueの降順で出力する方法

  22. 22

    PriorityQueue内の要素の優先度を変更する

  23. 23

    PriorityQueue内の要素の優先度を変更する

  24. 24

    PriorityQueue add Elementは要素を変更します、奇妙なバグ

  25. 25

    PriorityQueueはソートされていますが、2つが最大です

  26. 26

    キーでPriorityQueueの要素を検索する

  27. 27

    PriorityQueueは、最後に追加された要素を削除しています(lifoのように機能します)

  28. 28

    MariaDBの順序は間違っていますが、MySQLでは正しい

  29. 29

    ラテックスの参照番号の順序が間違っています

ホットタグ

アーカイブ