こんにちは!エンジニアの中沢です。
JavaにはFIFO(First In First Out)でデータを使用するための「Queue」があります。
先に入れたデータを先に出すことができるので、データを管理する上で非常に役立ちますよ!
またその逆の特徴をもつStack(スタック)も存在します。
この二つは似て非なるものです。
ぜひ特徴を把握し使い分けていきましょう。
この記事では、まずQueue(キュー)とStack(スタック)の違いを見ていきましょう。
そのあとは、Queue(キュー)の詳細を、そしてリンク先ではStack(スタック)の詳細を見ていきましょう。
応用的まできっちり説明していきますので必見です!
なお、Javaの記事については、こちらにまとめています。
Queue(キュー)とStack(スタック)とは
Queue(キュー)とは、先に入れたデータを先に取り出す仕組みのFIFO(First In First Out)を使うためのものです。
画像のように、追加したデータを古いものから順番に取り出して使用したい場合に使います。
逆に後から入れたものを先に取り出す仕組みはスタックと呼ばれます。
こちらは、最後に入れたデータを、最初に取り出す仕組みです。
取り出すときに、どこから先に取り出すのか?
これがQueue(キュー)とStack(スタック)の違いです。
初心者の方は「だからなんなんだろう?」と感じる箇所かもしれませんが…
データをよりわかりやすく管理する上で、この二つを正しく使い分けることは重要なことです。
ぜひこの違いを覚えておきましょう。
今回はこの後Queueの使い方について細かく見てきます。
もし「Stackが知りたいんだ!」という方は以下のリンクでStackの説明を行っています。
こちらを読んでみてください。
Queueの使い方
では早速Queueの使い方を見ていきましょう。
主に覚えるべき命令は3つです。
追加を行うadd
値を取り出すpull
値を(取り出さず)見るだけのpeek
この3つです。
順に見ていきましょう。
値を追加する方法(add)
ここでは、Queueに値を追加する方法を解説します。
Queueに値を追加するには、addメソッドの引数に追加したい値を指定します。
次のプログラムで確認してみましょう。
import java.util.ArrayDeque; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<String> queue = new ArrayDeque<>(); queue.add("sa"); queue.add("mu"); queue.add("ra"); queue.add("i"); System.out.println(queue); } }
実行結果:
[sa, mu, ra, i]
このようにして、値を追加することができました。
値を取り出す方法(poll)
ここでは、Queueの値を取り出す方法を解説します。
Queueの値を取り出すには、pollメソッドを使います。
取り出した値は削除されるので注意が必要です。
次のプログラムで確認してみましょう。
import java.util.ArrayDeque; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<String> queue = new ArrayDeque<>(); queue.add("sa"); queue.add("mu"); queue.add("ra"); queue.add("i"); System.out.println(queue.poll()); System.out.println(queue); } }
実行結果:
sa [mu, ra, i]
このようにして、値を取り出すことができました。
取り出した値はQueueから削除されていることが確認できます。
値を参照する方法(peek)
ここでは、Queueの値を参照する方法を解説します。
Queueの値を参照するには、peekメソッドを使います。
参照した場合には、値は削除されません。
次のプログラムで確認してみましょう。
import java.util.ArrayDeque; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<String> queue = new ArrayDeque<>(); queue.add("sa"); queue.add("mu"); queue.add("ra"); queue.add("i"); System.out.println(queue.peek()); System.out.println(queue); } }
実行結果:
sa [sa, mu, ra, i]
このようにして、値を参照することができました。
参照した値はQueueから削除されていないことが確認できます。
引き続きStack(スタック)も!
今回Queue(キュー)を学んだ人は、ぜひ合わせてStack(スタック)も学んでおいてください。
似た機能なので、すぐに理解ができるでしょう。
合わせて覚えて、うまく使い分けたいですね!
まとめ
いかがでしたか?
今回は「Queue」の使い方を解説しました。
先に入れたデータを先に出すことができるので、ぜひ活用してくださいね。
もし、Queueの使い方を忘れてしまったらこの記事を確認してください!