Rumah  >  Artikel  >  Java  >  Mengapakah Output toString PriorityQueue Saya Terganggu Walaupun Pembanding yang Betul?

Mengapakah Output toString PriorityQueue Saya Terganggu Walaupun Pembanding yang Betul?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 14:11:26298semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn