Percanggahan Urutan PriorityQueue dalam Output toString
Isu ini berpunca daripada penggunaan kaedah toString PriorityQueue yang salah apabila pembanding tidak mengisih elemen seperti yang dijangkakan.
Ralat Pembanding
Dalam pembanding yang diberikan HuffmanComparator, kod tersebut hendaklah diubah suai seperti berikut untuk mengutamakan nod dengan frekuensi yang lebih rendah:
<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 and Polling
Walaupun komparator kini betul, kaedah PriorityQueue toString tidak menjamin elemen diisih sepenuhnya. Untuk mendapatkan elemen yang diisih, kita harus meninjau item satu demi satu menggunakan gelung sementara:
<code class="java">while (!queue.isEmpty()) { System.out.println(queue.poll()); }</code>
Pendekatan ini memastikan struktur timbunan ditetapkan semasa setiap panggilan untuk tinjauan pendapat, menghasilkan susunan elemen yang diingini dalam outputnya.
Atas ialah kandungan terperinci Mengapakah Output toString PriorityQueue Saya Terganggu Walaupun Pembanding yang Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!