티스토리 뷰
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
'Programming' 카테고리의 다른 글
쿠버네티스(Kubernetes) 환경에서 스프링부트 리소스 최적화 (1) | 2025.04.23 |
---|---|
BlockingQueue 란? (0) | 2025.04.17 |
Java 주요 컬렉션 비교표 (0) | 2025.04.17 |
Observer 패턴 (Pub/Sub, 이벤트 리스너) (0) | 2025.04.17 |
CRON / Scheduler (1) | 2025.04.17 |