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 循環逐個輪詢項目:
<code class="java">while (!queue.isEmpty()) { System.out.println(queue.poll()); }</code>
這種方法確保堆結構在每次調用poll 期間都是固定的,從而得到所需的元素順序輸出。
以上是儘管比較器正確,但為什麼我的 PriorityQueue 的 toString 輸出混亂?的詳細內容。更多資訊請關注PHP中文網其他相關文章!