본문 바로가기

자바

자바 Queue

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

 

'자바' 카테고리의 다른 글

자바 Set  (0) 2023.07.24
자바 동기화  (0) 2023.07.24
자바 Stack  (0) 2023.07.24
자바 List  (0) 2023.07.23
자바 JVM 내부 구조 및 메모리 구조  (0) 2023.07.18