ジャワーのデータ構造キュー(Queue)の詳細解説
キューは一般的なデータ構造であり、特別な線形リストであり、先入先出(FIFO)の特性を持っています。キューは配列やリンクリストを使って実装することができます。
キューの基本操作には、エンキュー(enqueue)とデキュー(dequeue)があります。エンキュー操作は要素をキューの末尾に追加し、デキュー操作はキューの先頭の要素を削除して返します。
Javaでは、キューはQueueインターフェースを使用して実装されます。このインターフェースはCollectionインターフェースを継承しています。Queueインターフェースには、キューを操作するためのいくつかのメソッドが提供されており、要素を追加したり取り出したり、キューの先頭の要素を取得したりすることができます。
一般のキュー実装クラスには次の種類があります:
- LinkedListは、リンクリストを使ってキューを実装したものです。LinkedListクラスはQueueインタフェースを実装しており、要素の追加、削除、キューの先頭要素の取得などの操作が可能です。リンクリストの特性から、LinkedListは要素の挿入や削除が頻繁に行われる場合に効率的です。
- ArrayDequeは、ループ配列を使用してキューを実装したクラスです。ArrayDequeクラスはQueueインターフェースも実装しており、必要に応じて自動的に拡張され、両方向のキュー操作がサポートされています。
- PriorityQueueは、優先度に基づいたキューであり、Queueインターフェースを実装したクラスです。要素の優先度に基づいて並べ替えを行い、キューから取り出される要素は常に最も高い優先度を持つ要素です。
以下是一些常见的キュー操作:
- キューにエントリーするには、add()メソッドまたはoffer()メソッドを使用して要素をキューの末尾に追加します。
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.offer(2);
- キューからの要素の削除と返却には、remove()またはpoll()メソッドを使用してキューの先頭から削除します。
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
int first = queue.remove(); // 删除并返回1
int second = queue.poll(); // 删除并返回2
- キューの先頭要素を取得するには、element()またはpeek()メソッドを使用します。これにより、要素を取得するだけで、削除はされません。
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
int first = queue.element(); // 获取1
int second = queue.peek(); // 获取1
キューが空の場合、remove()やelement()メソッドを使用するとNoSuchElementException例外がスローされますが、poll()やpeek()メソッドを使用するとnullが返される点に注意する必要があります。
キューは、多くのアルゴリズムやプログラム設計に広く使われるデータ構造です。 Javaプログラマにとって、キューの基本操作と一般的な実装クラスの理解は非常に重要です。