ホームページ >Java >&#&チュートリアル >Java PriorityQueue イテレータが順序付けられたトラバーサルを保証しないのはなぜですか?
PriorityQueue Traversal Order Curiosity
Java PriorityQueue クラスは、驚くべきことに、特定の走査を保証しない組み込みイテレータを提供します。注文。標準からの逸脱により、PriorityQueue イテレータはなぜこのように動作するのかという疑問が生じます。
Java ドキュメントを詳しく調べると、次の文章に遭遇します。
「このクラスとそのイテレータは、すべてを実装します。 Collection インターフェイスと Iterator インターフェイスのオプションのメソッドのうち、メソッド iterator() で提供される Iterator は、特定の優先キューの要素を横断することが保証されていません。順序付けされた走査が必要な場合は、Arrays.sort(pq.toArray()) の使用を検討してください。"
根本的な理由は、PriorityQueue で採用されているデータ構造内にあります。配列やリンク リストなどのデータ構造とは異なり、PriorityQueue はバイナリ ヒープを利用し、最小または最大の要素の取得を優先します。ただし、この優先順位付けには代償が伴います。ヒープの性質上、その要素を順序立てて走査する効率的なアルゴリズムはありません。
バイナリ ヒープでは、最小の要素がルートに存在し、それが削除されると、ヒープは次に小さい要素をルートに上げるようにバランスを再調整します。この絶え間ない並べ替えにより、順序付けされたトラバーサルが非実用的になります。
したがって、PriorityQueue イテレーターは、要素が返される順序について何の保証も提供せずにデータ構造をトラバースするように設計されています。順序付けられたトラバーサルの場合、Arrays.sort() などの外部メソッドを、PriorityQueue の配列表現で使用する必要があります。
以上がJava PriorityQueue イテレータが順序付けられたトラバーサルを保証しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。