Deque

Deque (양방향 큐 인터페이스)

양 끝에서 요소를 삽입·제거할 수 있는 선형 컬렉션이에요. 이름 deque는 "double ended queue"의 줄임말로, 보통 "덱"이라고 발음해요. 용량 제한이 있는 덱과 고정 크기 제한이 없는 덱을 모두 지원해요.

출처: Java API Reference

본문

Deque<E>는 덱의 양 끝 요소에 접근하는 메서드를 정의해요. 삽입·제거·조회 메서드가 각각 두 형태로 존재해요. 하나는 실패 시 예외를 던지고, 다른 하나는 특수 값(null 또는 false)을 반환해요. 삽입 연산의 후자 형태는 용량 제한 덱을 위해 설계됐어요.

12가지 메서드를 정리하면 다음과 같아요.

첫 요소(Head) 마지막 요소(Tail)
예외 특수 값 예외 특수 값
삽입 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
제거 removeFirst() pollFirst() removeLast() pollLast()
조회 getFirst() peekFirst() getLast() peekLast()

이 인터페이스는 Queue 인터페이스를 확장해요. 덱을 큐로 사용하면 FIFO 동작이 되는데, 요소는 덱의 끝에 추가되고 앞에서 제거돼요.

Queue 메서드 동등한 Deque 메서드
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

덱은 LIFO 스택으로도 사용할 수 있고, 이 인터페이스는 레거시 Stack 클래스보다 우선해서 사용해야 해요.

Stack 메서드 동등한 Deque 메서드
push(e) addFirst(e)
pop() removeFirst()
peek() getFirst()

이 인터페이스는 내부 요소를 제거하는 removeFirstOccurrence, removeLastOccurrence 두 메서드도 제공해요. List 인터페이스와 달리 인덱스 기반 접근은 지원하지 않아요.

null 요소 삽입은 강제로 금지되지는 않지만 권장되지 않아요. 여러 메서드가 덱이 비었음을 나타내는 특수 반환 값으로 null을 쓰기 때문이에요.

Deque<String> deque = new ArrayDeque<>();
deque.addFirst("a");
deque.addLast("b");
String first = deque.removeFirst();

Deque 구현은 일반적으로 요소 기반의 equalshashCode를 정의하지 않고 Object의 항등 기반 버전을 상속해요. 이 인터페이스는 Java Collections Framework의 구성원이에요. 코드와 시그니처는 원문 그대로 보존돼요.

더 알아보기