๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ์–ธ์–ด/JAVA

[Java] Queue ์ธํ„ฐํŽ˜์ด์Šค ์„ค๋ช… ๋ฐ ์˜ˆ์ œ

by yunamom 2022. 4. 23.
728x90
300x250

โœจQueue ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋œ ์Šคํƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ž๋ฐ”์—์„œ ํ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋ณ„๋„์˜ ์ธํ„ฐํŽ˜์ด์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค.Queue๋Š” ์‚ฌ์ „์ ์œผ๋กœ "์ค„์„ ์„œ๋‹ค" ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, Stack๊ณผ ๋ฐ˜๋Œ€๋กœ ์ผ์ƒ์—์„œ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ฐœ๋…์ด๋‹ค.์ด๋Ÿฌํ•œ Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Deque<E>
  • BlockingDeque<E>
  • BlockingQueue<E>
  • TransferQueue<E>

Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง๊ฐ„์ ‘์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” ์ƒ๋‹นํžˆ ๋งŽ์ง€๋งŒ, ๊ทธ์ค‘์—์„œ๋„ Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ LinkedList ํด๋ž˜์Šค๊ฐ€ ํ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

ํ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•์‹ ์ผ๋ช… FIFO(First-In,First-Out) ๋ฐฉ์‹์ด๋‹ค.

์ฆ‰, ๊ฐ€์žฅ ๋จผ์ € ์ €์žฅ๋œ(push) ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ธ์ถœ(pop)๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

๋ณดํ†ต ์ปดํ“จํ„ฐ ๋ฒ„ํผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ, ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค์–ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

 

โœจQueue ์„ ์–ธ 

import java.util.LinkedList;
import java.util.Queue;

Queue<Integer> queue = new LinkedList<Integer>(); // Integer ํƒ€์ž…์œผ๋กœ ์„ ์–ธ
Queue<Integer> queue = new LinkedList<>(); // new๋ถ€๋ถ„ ํƒ€์ž… ์ƒ๋žต ๊ฐ€๋Šฅ
Queue<Integer> queue = new LinkedList<Integer>(Arrays.asList(1,2,3)); // ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…
Queue<String> queue = new LinkedList<>(); // String ํƒ€์ž…์œผ๋กœ ์„ ์–ธ
Queue<Character> queue = new LinkedList<Character>(); // Character ํƒ€์ž…์œผ๋กœ ์„ ์–ธ

 

Queue ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ Collection ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ๋งŒ์„ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฉ”์„œ๋“œ ์„ค๋ช…
queue.add(1); ํ์˜ ๋งจ ๋’ค์— ์ „๋‹ฌ๋œ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
์‚ฝ์ž…์— ์„ฑ๊ณตํ•˜๋ฉด true, ์‚ฝ์ž… ์‹คํŒจ์‹œ IllegalStateException์„ ๋ฐœ์ƒ์‹œํ‚ด.
queue.offer(2); ํ์˜ ๋งจ ๋’ค์— ์ „๋‹ฌ๋œ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•จ.
queue.peek(); ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š”(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ์š”์†Œ๋ฅผ return
๋งŒ์•ฝ ํ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด null์„ return
queue.poll(); ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š”(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ์š”์†Œ๋ฅผ return ํ›„, ํ•ด๋‹น ์š”์†Œ๋ฅผ ํ์—์„œ ์ œ๊ฑฐํ•จ.
๋งŒ์•ฝ ํ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด null์„ return
queue.remove(); ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š”(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•จ.
queue.clear(); ํ ์ดˆ๊ธฐํ™” (๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ)

โœจQueue ์˜ˆ์ œ 

import java.util.LinkedList;
import java.util.Queue;

public class Solution {
	
	public static void main(String[] args) {
		
		Queue<Integer> queue = new LinkedList<>();
		
		// ๊ฐ’ ์ถ”๊ฐ€ , ์„ฑ๊ณต์‹œ true ์‹คํŒจ์‹œ IllegalStateException ๋ฐœ์ƒ
		queue.add(1);
		System.out.println(queue); // [1]
		System.out.println(queue.add(2)); // true
		
		// ๊ฐ’ ์ถ”๊ฐ€
		queue.offer(3);
		System.out.println(queue); // [1, 2, 3]
		
		// ๋งจ ์•ž(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ๊ฐ’ return, ๊ฐ’์ด ์—†์„์‹œ null return
		System.out.println(queue.peek()); // 1
		System.out.println(queue); // [1, 2, 3]

		// ๋งจ ์•ž(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ๊ฐ’ return ํ›„ ํ•ด๋‹น ๊ฐ’์„ ํ์—์„œ ์ œ๊ฑฐํ•จ.
		System.out.println(queue.poll()); // 1
		System.out.println(queue); // [2, 3]
		
		// ๋งจ ์•ž(์ œ์ผ ๋จผ์ € ์ €์žฅ๋œ) ๊ฐ’์„ ์ œ๊ฑฐ
		queue.remove();
		System.out.println(queue); // [3]
		
		// ํ ์ดˆ๊ธฐํ™” (๋ชจ๋“  ๊ฐ’์ด ์ œ๊ฑฐ๋œ๋‹ค.)
		queue.clear();
		System.out.println(queue); // []	
	}
}
728x90
300x250

์ฝ”๋“œ