キューとは何ですか?
名前が示すとおり、キューは、先入れ先出し (FIFO) 挿入順序に従う Java の一般的なデータ構造です。スーパーの行列を思い浮かべると簡単に想像できるでしょう。早く入るほど早く出ます。これは、以前にキューに追加された要素も、より早くキューから離れることを意味します。キューの最初の要素 (先頭) はheadとも呼ばれます。Queueのpoll()メソッドとは何ですか?
poll() メソッドを使用すると、キューの最上位の要素 (ヘッド) を取得して削除できます。この例では、上記のキューでpoll()を呼び出すと、結果として「1」を受け取ります。そして、キューには 4 つの要素だけが残ります。Javaのpoll()メソッド
例1
図 1.0 に示されているキュー上で poll()関数を呼び出す簡単な例を見てください。
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
// create a queue of die rolls
Queue dieRoll = new LinkedList();
// Add 6 integers one by one
dieRoll.add(1);
dieRoll.add(2);
dieRoll.add(3);
dieRoll.add(4);
dieRoll.add(5);
dieRoll.add(6);
// print the original queue
System.out.println("Queue:\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
// after calling poll()
System.out.println("poll() returned : " + dieRoll.poll());
System.out.println("Queue Updated!\t" + dieRoll + "\n");
}
}
出力
キュー: [1, 2, 3, 4, 5, 6] vote() が返されました: 1 キューが更新されました! [2, 3, 4, 5, 6] vote() が返されました : 2 キューが更新されました! [3, 4, 5, 6] vote() が返されました : 3 キューが更新されました! [4、5、6]
各poll()呼び出し後にキューのサイズが1減り、ヘッドが返されることに 注意してください。
例 2
週の日数の別の例を見てみましょう。平日にpoll()を1つずつ 呼び出して、どのようになるかを確認します。
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
}
}
出力
曜日: [日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日] vote() が返されました: 日曜日 更新されました! [月曜、火曜、水曜、木曜、金曜、土曜] vote() が返されました: 月曜が更新されました! [火曜日、水曜日、木曜日、金曜日、土曜日] vote() が返されました: 火曜日の曜日が更新されました! 【水曜、木曜、金曜、土曜】
poll()はpeek()やremove()とどう違うのですか?
初心者にとって、3 つの異なる概念は非常によく似ているため、混同するのは非常に簡単です。「q」をキューとしましょう。それぞれの違いは次のとおりです。- q.poll() : キューの先頭を削除して取得します。
- q.peek() : 削除はせず、キューの先頭のみを取得/返します
- q.remove() : キューの先頭を削除して取得します。
例 3
次に、上記の 3 つの関数の例をいくつか見てみましょう。
import java.util.LinkedList;
import java.util.Queue;
public class QueuePollMethod {
public static void main(String[] args) {
Queue days = new LinkedList();
days.add("Sunday");
days.add("Monday");
days.add("Tuesday");
days.add("Wednesday");
days.add("Thursday");
days.add("Friday");
days.add("Saturday");
// print all the days in the week
System.out.println("Week Days: \t" + days + "\n");
// after calling peek()
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
System.out.println("peek() returned: " + days.peek());
System.out.println("Week Days: \t" + days + "\n");
// after calling remove()
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("remove() returned: " + days.remove());
System.out.println("Days Updated!\t" + days + "\n");
// after calling poll()
System.out.println("poll() returned: " + days.poll());
System.out.println("Days Updated!\t" + days + "\n");
System.out.println("poll() returned: " + days.poll());
System.out.println("remove() returned: " + days.remove());
}
}
出力
曜日: [日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日] Peak() が返される: 日曜日 曜日: [日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日] Peak() が返される: 日曜日 曜日: [日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日] Remove() が返されました: 日曜日 更新されました! [月曜日、火曜日、水曜日、木曜日、金曜日、土曜日]remove() が返されました:月曜日の日が更新されました。[火曜日、水曜日、木曜日、金曜日、土曜日] 返されたremove(): 火曜日 Remove() が返された: 水曜日 Remove() が返された: 木曜日 Remove() が返された: 金曜日 曜日が更新されました。[土曜日] vote() が返されました: 土曜日の曜日が更新されました! []poll() が返されました: null スレッド「メイン」の例外 java.util.LinkedList.removeFirst(LinkedList.java:270) の java.util.LinkedList.removeFirst(LinkedList.java:270) のスレッド「メイン」で java.util.NoSuchElementException
Peak() を呼び出した後でもわかるように、平日は変わりません。そして、 remove()またはpoll()を使用すると、ヘッドが返されると同時にキューのサイズが 1 減ります。さらに、空のキューでRemove() を呼び出すとjava.util.NoSuchElementExceptionがスローされますが、 poll()を使用した場合にはそのような例外はスローされません。
GO TO FULL VERSION