๋Œ€๊ธฐ์—ด์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด Queue๋Š” FIFO(First In First Out) ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” Java์˜ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค . ์‹๋ฃŒํ’ˆ ์ ์˜ ๋Œ€๊ธฐ์—ด๋กœ ์‰ฝ๊ฒŒ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นจ๋ฆฌ ๋“ค์–ด๊ฐˆ์ˆ˜๋ก ๋นจ๋ฆฌ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋œ ์š”์†Œ๋„ ๋” ์ผ์ฐ ๋– ๋‚  ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ(์•ž)๋Š” head ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค .์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ Java์˜ Queue poll() ๋ฉ”์„œ๋“œ - 2
๊ทธ๋ฆผ 1.0: Java์˜ ๊ฐ„๋‹จํ•œ ๋Œ€๊ธฐ์—ด

Queue์˜ poll() ๋ฉ”์„œ๋“œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

poll() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Queue์˜ ์ตœ์ƒ์œ„ ์š”์†Œ(ํ—ค๋“œ)๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ์œ„์˜ ๋Œ€๊ธฐ์—ด์—์„œ 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] poll() ๋ฐ˜ํ™˜๋จ: 1 ๋Œ€๊ธฐ์—ด ์—…๋ฐ์ดํŠธ๋จ! [2, 3, 4, 5, 6] poll() ๋ฐ˜ํ™˜: 2 ๋Œ€๊ธฐ์—ด ์—…๋ฐ์ดํŠธ! [3, 4, 5, 6] poll() ๋ฐ˜ํ™˜: 3 ๋Œ€๊ธฐ์—ด ์—…๋ฐ์ดํŠธ! [4, 5, 6]
๊ฐ poll() ํ˜ธ์ถœ ํ›„ ๋Œ€๊ธฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 1์”ฉ ์ค„์–ด๋“ค๊ณ  ํ—ค๋“œ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐฉ์‹์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค .

์˜ˆ 2

์ผ์ฃผ์ผ์˜ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ‰์ผ์— ํ•˜๋‚˜์”ฉ poll()์„ ํ˜ธ์ถœ ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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");                   
	}
}
์‚ฐ์ถœ
์š”์ผ: [์ผ์š”์ผ, ์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] poll() ๋ฐ˜ํ™˜: ์ผ์š”์ผ ์—…๋ฐ์ดํŠธ! [์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] poll() ๋ฐ˜ํ™˜: ์›”์š”์ผ ์—…๋ฐ์ดํŠธ! [ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] poll() ๋ฐ˜ํ™˜๋จ: ํ™”์š”์ผ ์—…๋ฐ์ดํŠธ๋จ! [์ˆ˜,๋ชฉ,๊ธˆ,ํ† ]

poll()์€ peek() ๋ฐ remove()์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”?

์„ธ ๊ฐ€์ง€ ๊ฐœ๋…์ด ๋งค์šฐ ๋น„์Šทํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ํ˜ผํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "q"๋ฅผ ๋Œ€๊ธฐ์—ด๋กœ ํ•ฉ์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • q.poll() : ๋Œ€๊ธฐ์—ด์˜ ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • q.peek() : ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐ์—ด์˜ ํ—ค๋“œ๋งŒ ๊ฒ€์ƒ‰/๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • q.remove() : ๋Œ€๊ธฐ์—ด์˜ ํ—ค๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ remove() ์™€ poll()์€ ์ •ํ™•ํžˆ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค . ์ •์ƒ์ ์ธ ์ƒํ™ฉ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๊ธฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด remove()๋Š” NoSuchElementException์„ ๋˜์ง€๊ณ  poll์€ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค .

์˜ˆ 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()); 

	}
}
์‚ฐ์ถœ
์š”์ผ: [์ผ์š”์ผ, ์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] peek() ๋ฐ˜ํ™˜: ์ผ์š”์ผ ์š”์ผ: [์ผ์š”์ผ, ์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] peek() ๋ฐ˜ํ™˜: ์ผ์š”์ผ ์ฃผ์ค‘ : [์ผ์š”์ผ, ์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] remove() ๋ฐ˜ํ™˜: ์ผ์š”์ผ ์—…๋ฐ์ดํŠธ! [์›”์š”์ผ, ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] remove() ๋ฐ˜ํ™˜: ์›”์š”์ผ ์—…๋ฐ์ดํŠธ! [ํ™”์š”์ผ, ์ˆ˜์š”์ผ, ๋ชฉ์š”์ผ, ๊ธˆ์š”์ผ, ํ† ์š”์ผ] remove() ๋ฐ˜ํ™˜๋จ: ํ™”์š”์ผ remove() ๋ฐ˜ํ™˜๋จ: ์ˆ˜์š”์ผ remove() ๋ฐ˜ํ™˜๋จ: ๋ชฉ์š”์ผ remove() ๋ฐ˜ํ™˜๋จ: ๊ธˆ์š”์ผ ์—…๋ฐ์ดํŠธ๋จ! [ํ† ์š”์ผ] poll() ๋ฐ˜ํ™˜: ํ† ์š”์ผ ์—…๋ฐ์ดํŠธ๋จ! [] poll()์ด ๋ฐ˜ํ™˜๋จ: java.util.LinkedList.removeFirst(LinkedList.java:270)์˜ "main" ์Šค๋ ˆ๋“œ java.util.NoSuchElementException์—์„œ null ์˜ˆ์™ธ java.util.LinkedList.remove(LinkedList.java:
peek() ํ˜ธ์ถœ ํ›„ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํ‰์ผ์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  remove() ๋˜๋Š” poll()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€๊ธฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ํ—ค๋“œ ๋ฐ˜ํ™˜๊ณผ ํ•จ๊ป˜ 1์”ฉ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋นˆ ๋Œ€๊ธฐ์—ด์—์„œ remove()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด java.util.NoSuchElementException ์ด ๋ฐœ์ƒ ํ•˜์ง€๋งŒ poll()์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค .

๊ฒฐ๋ก 

๋์œผ๋กœ Queues์˜ poll() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๋ฐ ์ž‘์—…์— ์ต์ˆ™ํ•ด์ง€์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜ผ๋™์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์–ธ์ œ๋“ ์ง€ ์—ฌ๊ธฐ๋กœ ๋Œ์•„์™€ ์ƒ๋‹ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ณตํ•œ ์ฝ”๋”ฉ!