Javaリソース構造の理解と使用-Queueインタフェース


1.Queueは


QueueはFIFO特性を持つ資料構造である.

Dequeueはキューフロントエンドに格納されているデータを削除する操作であり、Enqueueはキューバックエンドに新しいデータを追加する操作である.
ジッタが発生するたびに、データは前に1つずつ、前に最初に入ったデータがあり、同様にenqueueでもデータは前に1つずつ入っていくので、後ろに最後に入ったデータがあります.このようにして、先入先出のデータを管理することができる.

2.JavaにおけるQueueインタフェース


Javaでは、Queueのインタフェースには次のパッケージと形式があります.
package java.util.Queue;
// Interface Queue<E> queue

// 생성 : 인터페이스이기 때문에 클래스로 생성자를 지정해야 한다.
import java.util.Queue;
import java.util.LinkedList;
Queue<Integer> q = new LinkedList<Integer>();
JavaでQueueインタフェースのメソッドは次のとおりです.

[ソース:https://docs.oracle.com/javase/10/docs/api/java/util/Queue.html]
Enqueue操作を実行する方法はadd()とprove()です.Descriptionでadd
Dequeueを実行する操作にはpoll()とremove()があります.どちらのメソッドもDequeueデータを返します.ただしpoll()はキューが空の場合nullを返し、remove()はキューが空の場合にNoSuchElementExceptionを放出する点で差があります.
それ以外にelement()とpeek()はheadのデータを返すがキューに並ばない操作である.Element()はキューが空の場合にNoSuchElementExceptionを放出しますが、peek()はnullを返します.
表にまとめると以下のようになります.

したがって、ストレージ容量の限られたキューを使用する場合は、提供、ポーリング、peekを使用してアクションを記述することが望ましい.

3.JavaにおけるQueueインタフェースのメンバー、メソッド使用コード


以下に、上述した説明により生成されたリンクリストを用いて方法を用いたQueueインタフェースの例コードを示す.
import java.util.Queue;
import java.util.LinkedList;
/* Name of the class has to be "Main" only if the class is public. */
class Main
{
	public static void main (String[] args) throws java.lang.Exception
	{
		Queue<Integer> q = new LinkedList<Integer>();
        // offer를 통해 element인 Integer를 enqueue해주었다.
		q.offer(1);
		q.offer(2);
		q.offer(3);
        // peek은 아무리 해도 같은 값으로 나온다.
		System.out.println("peek: " + q.peek());
		System.out.println("peek: " + q.peek());
		System.out.println("peek: " + q.peek());
        // poll을 하니 dequeue가 이루어진다.
		System.out.println("poll: " + q.poll());
		System.out.println("poll: " + q.poll());
		System.out.println("poll: " + q.poll());
	}
}

References


Queueの理論記述:https://coding-factory.tistory.com/602
java.util.Queue: https://docs.oracle.com/javase/10/docs/api/java/util/Queue.html