1. ホーム
  2. java

[解決済み] Java Queueの最適な実装は?

2022-03-05 12:57:59

質問

私は、画像のピクセルを中心点から外側に向かって再帰的に走査する再帰的画像処理アルゴリズムに取り組んでいます(Javaで)。

残念なことに、それはスタックオーバーフローを引き起こします。そこで、キューベースのアルゴリズムに変更することにしました。

しかし、キューが非常に短い時間で何千ものピクセルを分析し、常にポッピングとプッシュを行い、予測可能な状態を維持しない(長さが100から20000の間のどこかになる)ことを考えると、キューの実装は非常に高速なポッピングとプッシュ能力を持つ必要があるのです。

リンクリストは、リスト内の他の要素を並べ替えることなく自分自身に要素をプッシュできるため魅力的に見えますが、十分に高速であるためには、その先頭と末尾(2重にリンクされていない場合は最後から2番目のノード)の両方に簡単にアクセスできる必要があります。悲しいことに、Javaのリンクリストの基本的な実装に関連する情報が見つからないので、リンクリストが本当に望ましい方法かどうかを判断するのは難しいのですが...。

そこで、私の疑問が生まれました。私が行おうとしていることに対して、JavaにおけるQueueインターフェースの最良の実装は何でしょうか?(私はキューの先頭と末尾以外のものを編集したり、アクセスしたりすることを望んでいません。) 私はどんな並べ替えや何かをすることを望んでいません。一方、私は多くのプッシュとポップを行うつもりで、キューのサイズはかなり変更されるため、事前割り当ては非効率的でしょう)

どのように解決するのですか?

使用する。

Queue<Object> queue = new LinkedList<>();

を使用することができます。 .offer(E e) を使えば、キューに要素を追加することができます。 .poll() でキューを解放し、キューの先頭(最初の要素)を取得します。

Javaでは、インターフェイス Queue は、その LinkedList は実装を提供した。

また、HeadとTailの要素への参照も保持しており、これらは以下の方法で取得することができます。 .getFirst().getLast() をそれぞれ作成します。


キューのインターフェイスを提案した @Snicolas に感謝します。