Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Java]Queue, Deque

Posted at

Java Goldのお勉強をしていたら出てきたので走り書き。

Queue<E>

Collection<E>を継承する。すなわち配列とかみたいに複数のデータをまとめて使うための物。
では他のコレクションと何が違うのか、Queueという単語を某英語翻訳サイトで調べてみると、

(順番を待つ人や乗り物の)列

とのこと。()内がわりとミソ。

すなわち「FIFO(First-in-First-out)」という最初に入れたものを最初に取り出すことのできるデータ構造になっています。
順番待ってる人も先に並んでる人が先に順番回ってきますしね。

そんなわけで「待ち行列」と呼ばれていたりもします。

ただし別にFIFOの実装でなければならない、ということではないそうです。

メソッド

エラー時に例外を投げる エラー時にnullを返す
挿入 add(e) offer(e)
取出し remove() poll()
参照 element() peak()
QueueTest.java
import java.util.Queue;
import java.util.ArrayDeque;

public class QueueTest {
    public void myQueue() {
        Queue<Integer> queueTest = new ArrayDeque<Integer>();
        for(int i=0; i < 10; i++) {
            // キューに値を挿入
            queueTest.add(i);
        }
        // キューに値を挿入
        queueTest.offer(100);

        System.out.println(queueTest);
        
        // 先頭を取り出す
        Integer r = queueTest.remove();
        System.out.println("remove value: " + r);

        // 先頭を参照
        System.out.println(queueTest.element());

        // 先頭を取りだす
        Integer p = queueTest.poll();
        System.out.println("poll value: " + p);

        // 先頭を参照
        System.out.println(queueTest.peek());

        System.out.println(queueTest);
    }
}

実行結果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100]
remove value: 0
1
poll value: 1
2
[2, 3, 4, 5, 6, 7, 8, 9, 100]

Deque<E>

Queue<E>を継承する。正式名称は「Double Ended Queue(両端キュー)」
その名の通り要素を両端から挿入・削除できるキューです。

ちなみにDequeは「デック」と読むらしいです。
「『デキュー』じゃないのか…」と思ったのですが、「データを取り出す操作」を意味する「dequeue(デキュー)」と
ごっちゃになってました。同じ過ちを犯した人は絶対いるはず。

メソッド

エラー時に例外を投げる エラー時にnullを返す
挿入(先頭) addFirst(e) offerFirst(e)
挿入(末尾) removeFirst() pollFirst()
取出し(先頭) getFirst() peakFirst()
取出し(末尾) addLast() offerLast()
参照(先頭) removeLast() pollLast()
参照(末尾) getLast() peakLast()
なんで例外スローの方の参照elementFirst/Lastじゃないんや…
DequeTest.java
import java.util.Deque;
import java.util.ArrayDeque;

public class DequeTest {
    public void myDeque() {
        Deque<Integer> dequeTest = new ArrayDeque<Integer>();
        for(int i=0; i < 10; i++) {
            // キューに値を先頭から挿入
            dequeTest.addFirst(i);
        }

        System.out.println(dequeTest);

        // 末尾を取り出す
        Integer r = dequeTest.removeLast();
        System.out.println("remove value: " + r);

        // 末尾を参照
        System.out.println(dequeTest.getLast());

        // 先頭を取りだす
        Integer p = dequeTest.pollFirst();
        System.out.println("poll value: " + p);

        // 先頭を参照
        System.out.println(dequeTest.peekFirst());

        System.out.println(dequeTest);
    }
}

実行結果:

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
remove value: 0
1
poll value: 9
8
[8, 7, 6, 5, 4, 3, 2, 1]

0~9の値の挿入順がQueueと逆になっているのがわかりますね。
両方向から挿入可能なので、「LIFO(Last-in-First-out)/ 後入れ先出し法」を用いるスタックとして使用することも可能です。

5
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?