Programming

Java 큐/스택 계열 컬렉션 비교

ipxy 2025. 4. 17. 07:51
728x90

 

✅ Java 큐/스택 계열 컬렉션 비교

컬렉션  특징  주요 메서드  시간 복잡도  용도 / 사용 시점
Stack 후입선출(LIFO) 구조 push(), pop(), peek() O(1) 계산기, 괄호 검사, DFS
Queue (인터페이스) 선입선출(FIFO) 구조 offer(), poll(), peek() O(1) 일반적인 작업 대기열
LinkedList Queue, Deque 동시 구현 add(), remove(), get() 등 O(1) (양 끝 삽입/삭제) 큐, 덱 용도로 유연하게 사용 가능
ArrayDeque Deque 구현체, 스택/큐 대체 가능 addFirst(), addLast(), pollFirst() 등 O(1) Stack, Queue 대체로 우수
PriorityQueue 우선순위 큐 (힙 기반) offer(), poll(), peek() O(log n) 우선순위 작업 스케줄링
ConcurrentLinkedQueue 멀티스레드 환경용 비블로킹 큐 offer(), poll() O(1) 고성능 멀티스레드 큐
BlockingQueue 스레드간 데이터 전달용 인터페이스 put(), take() (블로킹) O(1) 생산자-소비자 패턴
Deque (인터페이스) 양방향 큐 addFirst(), addLast() 등 O(1) 양방향 처리 필요 시
PriorityBlockingQueue 우선순위 + 블로킹 큐 put(), take() O(log n) 우선순위 있는 다중 스레드 큐

🧠 용도별 추천 정리

사용목적 추천 컬렉션  이유
일반적인 큐 (FIFO) LinkedList, ArrayDeque 간단하고 빠름
스택 (LIFO) ArrayDeque Stack보다 빠르고 최신 구현
우선순위 큐 PriorityQueue 내부에서 자동 정렬됨 (min-heap)
멀티스레드 큐 ConcurrentLinkedQueue 락 없는 고성능 큐
생산자-소비자 BlockingQueue 계열 쓰레드 간 안전한 데이터 전달
양방향 큐 Deque, ArrayDeque 앞/뒤 삽입/삭제 자유

📌 주요 예제 코드

// Stack (LIFO)
Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.push("B");
System.out.println(stack.pop()); // B

// Queue (FIFO)
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
System.out.println(queue.poll()); // A

// PriorityQueue (min-heap)
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.offer(1);
pq.offer(2);
System.out.println(pq.poll()); // 1 (가장 작은 수부터)

// Deque
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("front");
deque.addLast("back");
System.out.println(deque.pollFirst()); // front

⚠️ Stack vs ArrayDeque?

Stack  ArrayDeque
오래된 클래스 (Legacy) 최신 대체 구현
Vector 기반 → 동기화됨 (느림) 비동기, 빠름
거의 사용하지 않음 (비추천) ✔ 스택/큐 대체로 가장 추천

 

728x90