Javaのデータ構造であるキュー(Queue)について詳しく説明します。
キューは、先入先出(FIFO)のデータ構造であり、要素を一方の端に挿入し、他方の端から削除できます。キューでは、要素を挿入する端を「リア」と呼び、要素を削除する端を「フロント」と呼びます。
JavaのQueueインターフェースは、Collectionインターフェースを継承したサブインターフェースであり、キューを操作するためのいくつかのメソッドを定義しています。一般的に使用される実装クラスには、LinkedListとArrayDequeがあります。
Queueインターフェースでよく使われるメソッドは以下の通りです:
- enqueue(E e):要素eをキューの末尾に追加します。
- dequeue()関数:キューの先頭の要素を削除し、その要素を返す。
- peek():先頭の要素を取得しますが、削除はしません。
- isEmpty()メソッドは、キューが空かどうかを確認します。
- size()メソッドは、キュー内の要素の数を取得します。
LinkedListとArrayDequeはJavaでよく使われるキューの実装クラスです。両方がQueueインターフェースを実装しているため、Queueインターフェースで定義されているメソッドを直接使用することができます。
- LinkedListは双方向リンクリストを実装し、キューとして使用することができます。enqueue(E e)メソッドは要素をリストの末尾に挿入し、dequeue()メソッドはリストの最初の要素を削除してその要素を返します。
サンプルコード:
Queue<Integer> queue = new LinkedList<>();
queue.enqueue(1); // 队列中插入元素1
queue.enqueue(2); // 队列中插入元素2
System.out.println(queue.peek()); // 输出队头元素
int num = queue.dequeue(); // 删除队头元素,并返回该元素
System.out.println(num); // 输出删除的元素
System.out.println(queue.isEmpty()); // 判断队列是否为空
System.out.println(queue.size()); // 输出队列中元素的个数
- ArrayDequeは、双方向キューの実装クラスであり、キューの実装としても使用できます。そのenqueue(E e)メソッドは要素を双方向キューの末尾に挿入し、dequeue()メソッドは双方向キューの最初の要素を削除してその要素を返します。
サンプルコード:
Queue<Integer> queue = new ArrayDeque<>();
queue.enqueue(1); // 队列中插入元素1
queue.enqueue(2); // 队列中插入元素2
System.out.println(queue.peek()); // 输出队头元素
int num = queue.dequeue(); // 删除队头元素,并返回该元素
System.out.println(num); // 输出删除的元素
System.out.println(queue.isEmpty()); // 判断队列是否为空
System.out.println(queue.size()); // 输出队列中元素的个数
キューは非常に広範囲に利用されており、例えばメッセージキュー、スレッドプールなどの実装にキューのデータ構造を使用することができます。