CodeGym /Java Blog /ランダム /Java の Quepoll() メソッドと例
John Squirrels
レベル 41
San Francisco

Java の Quepoll() メソッドと例

ランダム グループに公開済み

キューとは何ですか?

名前が示すとおり、キューは、先入れ先出し (FIFO) 挿入順序に従う Java の一般的なデータ構造です。スーパーの行列を思い浮かべると簡単に想像できるでしょう。早く入るほど早く出ます。これは、以前にキューに追加された要素も、より早くキューから離れることを意味します。キューの最初の要素 (先頭) はheadとも呼ばれます。Java の Queue poll() メソッドと例 - 2
図 1.0: Java の単純なキュー

Queueのpoll()メソッドとは何ですか?

poll() メソッドを使用すると、キューの最上位の要素 (ヘッド) を取得して削除できます。この例では、上記のキューでpoll()を呼び出すと、結果として「1」を受け取ります。そして、キューには 4 つの要素だけが残ります。Java の Queue poll() メソッドと例 - 3
図 1.1: キューで poll() メソッドを使用した後

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() : キューの先頭を削除して取得します。
したがって、 remove()poll() はまったく同じであるように見えます。通常の状況では同様に機能します。ただし、キューが空の場合、remove() はNoSuchElementExceptionをスローしますが、poll はnullを返します。

例 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()を使用した場合にはそのような例外はスローされません。

結論

最後までに、 Queues のpoll()メソッドの使用法と動作について理解していただければ幸いです。ただし、混乱がある場合は、いつでもここに戻って相談することができます。コーディングを楽しんでください!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION