toString 出力における PriorityQueue の順序の不一致
この問題は、コンパレーターが要素を並べ替えない場合の PriorityQueue の toString メソッドの誤った使用に起因します。
コンパレータ エラー
指定されたコンパレータ HuffmanComparator では、コードを次のように変更して、周波数の低いノードを優先する必要があります:
<code class="java">public int compare(TreeNodeHuffman p1, TreeNodeHuffman p2) { if (p1.frequency > p2.frequency) return -1; if (p1.frequency < p2.frequency) return 1; return 0; }</code>
toString とポーリング
コンパレータは正しくなりましたが、PriorityQueue の toString メソッドは要素が完全に並べ替えられることを保証しません。ソートされた要素を取得するには、while ループを使用して項目を 1 つずつポーリングする必要があります。
<code class="java">while (!queue.isEmpty()) { System.out.println(queue.poll()); }</code>
このアプローチにより、ポーリングの各呼び出し中にヒープ構造が確実に固定され、結果として要素が望ましい順序になります。出力。
以上がコンパレータが正しいにもかかわらず、PriorityQueue の toString 出力が乱れているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。