1. 큐 (Queue) 란?
- 데이터를 일시적으로 저장하는 자료구조이다.
- 스택과 다르게 먼저 들어온 데이터가 먼저 나가는(First-In-First-Out, FIFO) 방식이다.
- 큐는 주로 데이터를 처리하는 순서를 관리하고, 작업을 대기열에 저장하거나 동시에 여러 작업을 처리하는
멀티스레드 환경에서 사용한다.
- 줄을 서서 기다린다는 것처럼 먼저 들어오는 데이터가 먼저 나가는 형식이다.
- Enqueue (rear) : 큐의 뒷 부분이고 삽입 연산만 수행한다.
- Dequeue (front) : 큐의 앞 부분이고 삭제 연산만 수행한다.
2. 큐 (Queue) 특징
- 큐는 일반적으로 크기가 제한되어 있고, 새로운 값을 추가할 때 큐가 가득 차 있는 경우 값을 추가할 수 없다.
- 이런 경우에 따라 Enqueue 작업은 큐의 상태를 확인하고 추가를 시도할 수 있습니다.
- 큐는 일반적으로 순회 가능한(iterable) 자료구조여서 for-each 루프를 사용하여 큐의 모든 값을 접근할 수 있다.
- 큐는 멀티스레드 환경에서 스레드 간의 동기화를 쉽게 관리하기 위해 사용한다.
- 여러 스레드가 동시에 큐에 데이터를 넣거나 빼낼 때, FIFO 특성을 유지하여 데이터를 순차적으로 처리할 수 있다.
3. 큐 (Queue) 메서드
- add(e): 큐에 값을 추가한다. 큐에 공간이 부족하여 요소를 추가할 수 없는 경우 IllegalStateException을 발생한다.
- offer(e): 큐에 값을 추가합니다. 큐에 공간이 부족한 경우 요소를 추가하지 않고 false를 반환
* add와 offer 메서드의 차이는 큐가 가득 차 있는 상태에서 add는 예외 발생을 하고 offer는 false을 반환하는 차이다.
즉, add 메서드는 값을 추가하기전에 큐가 가득 차 있는지 먼저 확인해야 하는 경우에 쓰인다.
- remove(): 큐의 가장 앞에 있는 값을 (헤드 요소) 조회하고 제거한다. 만약, 큐가 비어있는 경우
NoSuchElementException을 발생한다.
- poll(): 큐의 가장 앞에 있는 값을 (헤드 요소) 제거하고 반환한다. 큐가 비어있는 경우 null을 반환
- peek(): 큐의 가장 앞에 있는 값을 (헤드 요소) 반환한다. 큐가 비어있는 경우 null을 반환
import java.util.Queue;
import java.util.ArrayDeque;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new ArrayDeque<>();
// 큐에 값 추가 -> Enqueue
queue.offer(1);
queue.offer(2);
queue.offer(3);
// 큐에서 첫번째 값 반환 후 제거 -> Dequeue
System.out.println(queue.poll()); // 출력: 1
System.out.println(queue.poll()); // 출력: 2
// 큐의 가장 앞에 있는 값 반환 (제거하지 않음) -> 헤드 조회
System.out.println(queue.peek()); // 출력: 3
System.out.println(queue.peek()); // 출력: 3
}
}
4. 큐 (Queue) 의 종류
- LinkedList: java.util.LinkedList 클래스를 사용하여 큐를 구현한다.
이중 연결 리스트를 기반으로 구현되어 선입선출(FIFO)이다.
큐의 맨 끝에 요소를 추가하고, 맨 앞에서 요소를 제거할 수 있다.
- ArrayDeque: java.util.ArrayDeque 클래스를 사용하여 큐를 구현한다.
동적으로 크기가 조정되는 배열 기반의 덱(Deque) 자료구조이다.
큐의 맨 끝에 요소를 추가하고, 맨 앞에서 요소를 제거할 수 있다.
스택(Stack)과 양방향 큐(Deque)의 특징을 모두 지원한다.
- PriorityQueue: java.util.PriorityQueue 클래스를 사용하여 우선순위 큐를 구현한다.
기본적으로 FIFO 구조를 가졌지만, 우선순위를 결정하여 우선순위가 높은 요소가 먼저 나간다.
작은 값을 우선적으로 처리하거나 우선순위를 처리한다.
참고 및 출처 :
https://coding-factory.tistory.com/602
[Java] 자바 Queue 클래스 사용법 & 예제 총정리
Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를
coding-factory.tistory.com