import java.util.LinkedList;
import java.util.Queue;
public class CustomQueue<T> {
private Queue<T> queue;
// コンストラクタ
public CustomQueue() {
this.queue = new LinkedList<>();
}
// キューに要素を追加するメソッド
public void enqueue(T element) {
queue.add(element);
}
// キューから要素を取り出し、取り出した要素を返すメソッド
public T dequeue() {
if (isEmpty()) {
// キューが空の場合は例外をスロー
throw new IllegalStateException("Queue is empty");
}
return queue.poll();
}
// キューが空かどうかを判定するメソッド
public boolean isEmpty() {
return queue.isEmpty();
}
}
このクラスは、ジェネリクスを使用して要素の型を指定できるようになっています。enqueue
メソッドで要素を追加し、dequeue
メソッドで要素を取り出します。isEmpty
メソッドでキューが空かどうかを判定します。
QueueとDeque
- Queue (キュー):
- キューは、要素が先入れ先出し(FIFO)のデータ構造です。
- 新しい要素はキューの末尾に追加され、取り出すときは先頭から取り出されます。
enqueue
メソッドで要素を追加し、dequeue
メソッドで先頭の要素を取り出します。- 例: レストランの待ち行列のように、最初に来た人が最初にサービスを受けるイメージです。
- Deque (デック):
- デックは、両端キュー(Double-Ended Queue)の略で、キューとスタックの機能を併せ持ったデータ構造です。
- 先頭と末尾の両方から要素の追加・取り出しができます。
enqueue
とdequeue
の他に、先頭からの要素の取り出し (pollFirst
) や末尾からの要素の取り出し (pollLast
) が可能です。- 例: バッファの先頭や末尾からデータを挿入または削除する場合に便利です。
- 共通の操作:
- キューとデックはどちらも、要素の追加や取り出しの基本的な操作を提供します。
isEmpty
メソッドで空かどうかを判定できます。
- Javaの実装:
- Javaでは、
Queue
インターフェースとそのサブインターフェースであるDeque
インターフェースが提供されています。 - 具体的な実装クラスとして、
LinkedList
がよく利用されます。 LinkedList
はQueue
インターフェースとDeque
インターフェースを実装しており、両者の機能を提供します。
- Javaでは、
- 選択のポイント:
- キューかデックかは、使用するケースによります。データの操作がキューのように先入れ先出しで十分な場合はキューを使用し、両端からの操作が必要な場合はデックを使用します。
このように、QueueとDequeはデータの操作の特性によって選択され、Javaではこれらの機能を提供するためのインターフェースと実装クラスが用意されています。
QueueとDequeはデータの効率的な操作を可能にする重要なデータ構造です。QueueはFIFO(先入先出)の特性を持ち、データを順番に処理する際に有用です。一方、Dequeは先頭と末尾の両方からの操作が可能で、柔軟性が高いです。Javaの標準ライブラリでは、これらの概念をサポートするためにQueueインターフェースとDequeインターフェースが提供され、LinkedListなどの具体的な実装クラスが利用できます。
プログラムの中でこれらのデータ構造を適切に使用することで、データの追加や取り出しを効率的に行うことができます。データ処理の特性に応じてQueueやDequeを選択し、適切に利用することで、プログラムのパフォーマンスや可読性を向上させることができます。