Deque
Deque (양방향 큐 인터페이스)
양 끝에서 요소를 삽입·제거할 수 있는 선형 컬렉션이에요. 이름 deque는 "double ended queue"의 줄임말로, 보통 "덱"이라고 발음해요. 용량 제한이 있는 덱과 고정 크기 제한이 없는 덱을 모두 지원해요.
본문
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 구현은 일반적으로 요소 기반의 equals와 hashCode를 정의하지 않고 Object의 항등 기반 버전을 상속해요. 이 인터페이스는 Java Collections Framework의 구성원이에요. 코드와 시그니처는 원문 그대로 보존돼요.