Queue 자료구조
선입 선출(First In, First Out, FIFO) 방식의 자료구조이다.
Queue 인터페이스
선입선출(FIFO) 구조를 정의하고, 큐 자료구조에 필요한 기본 동작(메서드들)을 약속하는 추상적인 인터페이스이다.
import java.util.Queue;
자바 util 패키지에 포함되어 있다.
1. 객체 생성
Queue<String> set = new Queue<>(); // ❌ 불가능
Queue<String> set = new LinkedList<>(); // ✅ 가능
Queue<String> set = new PriorityQueue<>(); // ✅ 가능
Queue<String> set = new ArrayDeque<>(); // ✅ 가능
Queue<String> set = new concurrentLinkedQueue<>(); // ✅ 가능
Queue<String> set = new LinkedBlockingQueue<>(); // ✅ 가능
- Java에서 제공하는 Queue 인터페이스(Queue<k>)는 객체를 직접 생성 ❌.
(추가 정보 확인 : https://kimyongjun0129.tistory.com/98) - 따라서 LinkedList, PriorityQueue, ArrayDeque 등의 구현체(클래스)를 사용해야 한다.
- 위 코드에서 처럼 작성하는 이유 :
- 코드의 유연성 증가 : 필요에 따라 다른 구현체로 쉽게 교체할 수 있다.
- 다형성(Polymorphism) 활용 : 구현체에 의지 ❌, 하나의 인터페이스로 여러 가지 구현체를 사용할 수 있다. ✅
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.ArrayDeque;
...
다른 구현체(클래스)를 사용할 때는 import를 시켜줘야 한다.
2. 주요 구현체
구현 클래스 | 특징 |
LinkedList | Queue, Deque, List 등 다중 인터페이스 구현. 가장 흔하게 사용됨 |
PriorityQueue | 우선순위 큐. 작은 값(기본 min-heap)이 먼저 나옴 |
ArrayDeque | 큐와 덱을 모두 빠르게 구현. Array 기반. Null 허용 안 함 |
ConcurrentLinkedQueue | 멀티스레드 환경에서 안전한 비동기 큐 |
LinkedBlockingQueue | 블로킹 큐 (멀티스레드, 생산자-소비자 패턴에 사용) |
3. 주요 공통 메서드들
메서드 | 설명 |
add(E e) | 큐에 요소를 추가 (❗예외 발생 가능) |
offer(E e) | 큐에 요소를 추가 (실패 시 false 반환) |
remove() | 큐에서 요소 제거 ( ❗ 예외 발생 가능) |
poll() | 큐에서 요소 제거 (비어있으면 null 반환) |
element() | 큐의 front 조회 ( ❗ 예외 발생 가능) |
peek() | 큐의 front 조회 (비어있으면 null 반환) |
Queue의 주요 메서드는 Queue 인터페이스에 정의된 것들이라 모든 Queue 구현체( LinkedList, PriorityQueue, ArrayDeque 등)에서 사용 가능 ✅
만약, 인터페이스를 통해 구현된 공통 메서드들이 아닌 각 구현체(클래스)의 기능을 사용하고 싶다면
PriorityQueue<String> queue = new PriorityQueue<>();
다음과 같이 인터페이스가 아닌 클래스를 이용하여 변수를 선언하고 할당하면 된다.
4. 사용 예제
더보기
더보기
import java.util.Queue;
import java.util.LinkedList;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println("Peek: " + queue.peek()); // A
System.out.println("Poll: " + queue.poll()); // A
System.out.println("After Poll: " + queue); // [B, C]
}
}
'JAVA' 카테고리의 다른 글
[Java] Wrapper Class란? (0) | 2025.04.16 |
---|---|
[Java] 상속(Inheritance)이란? (0) | 2025.04.15 |
[Java] Set 자료구조와 Set 인터페이스란? (0) | 2025.04.14 |
[Java] List 자료 구조와 List 인터페이스란? (0) | 2025.04.14 |
[Java] Collection이란? (0) | 2025.04.14 |