Stack & Queue & Deque

최수연·2026년 2월 1일

Java 코딩테스트

목록 보기
7/8

왜 Stack 대신 Deque를 쓸까?

1. 상속의 문제
: Stack은 Vector 클래스를 상속받는데, 이 때문에 Stack의 LIFO 원칙에 맞지 않게 인덱스로 중간의 값을 수정하거나 삭제하는 것이 가능해짐.

2. 성능의 문제
: Stack은 모든 메서드에 synchronized되어 있어 멀티스레드 환경이 아닌 일반적인 싱글스레드 코딩테스트 환경에서는 성능이 느림

3. 공식 문서의 권고
: Java 공식 문서에서도 ‘Stack 구조가 필요하다면 Stack 클래스 대신 ArrayDeque를 사용하라’고 명시되어 있음



Stack / Queue / Deque 선언 방법

// stack
Deque<Integer> stack = new ArrayDeque();

// queue
Deque<Integer> queue = new ArrayDeque();
Queue<Integer> queue = new ArrayDeque();  // Queue의 기능을 강조하고 싶을 때 사용

// deque
Deque<Integer> deque = new ArrayDeque();


Stack / Queue / Deque 사용 방법

stack.push();    // 데이터 삽입
stack.pop();     // Last 데이터 추출
stack.peek();    // Last 데이터 확인

queue.offer();   // 데이터 삽입
queue.poll();    // First 데이터 추출
queue.peek();    // First 데이터 확인

** 참고
: ArrayDeque에서 push()는 내부적으로 addFirst()를 호출하고, pop()은 removeFirst()를 호출함(Stack). offer()은 addLast()를 호출하고, poll()은 removeFirst()를 호출함.

0개의 댓글