Java PriorityQueue での優先度の更新
オブジェクトの順序付けに Comparator を備えた PriorityQueue を利用する場合、その後のオブジェクトのクラス変数の変更 (
伝統的に、単純な解決策には、オブジェクトを削除し、その値を更新し、再挿入して、優先度キューのコンパレーターをトリガーすることが含まれます。しかし、PriorityQueue のラッパー クラスを作成するより効率的な代替手段はありますか?
回答
残念ながら、削除して再挿入することが最も効果的なアプローチであることに変わりはありません。 PriorityQueue は本質的に、挿入時に新しい要素を適切な位置に挿入し、キューのパフォーマンスを最適化します。デキュー操作中に最も優先度の高い要素を検索すると、パフォーマンスに大きな影響を与えます。
TreeMaps は、HashMap (要素のハッシュコードが変更されると失敗します) と同様に、この制限を共有します。
ラッパー クラスの作成には、必要な場合があります。比較コードをエンキューからデキューに移動し、エンキュー中のソートの必要性を排除します。ただし、このアプローチではパフォーマンスが低下し、優先更新時の同期が必要になります。どちらの方法でも同期が必要であるため、デキューと再エンキューにより、よりシンプルでパフォーマンスの高いソリューションが提供されます。
以上が## 削除して再挿入せずに Java PriorityQueue の優先順位を更新できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。