ホームページ  >  記事  >  Java  >  コンパレータが正しいにもかかわらず、PriorityQueue の toString 出力が乱れているのはなぜですか?

コンパレータが正しいにもかかわらず、PriorityQueue の toString 出力が乱れているのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 14:11:26294ブラウズ

Why is My PriorityQueue's toString Output Disordered Despite a Correct Comparator?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。