Deque(데크, 덱) 는 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다.
자바에서의 덱은 인터페이스로 구현되었다. 덱 자료구조의 여러 연산들을 정의한 Deque 인터페이스가 있고 이를 구현한 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스가 있다.

Deque 인터페이스의 메소드는 위의 그림과 같다.
addFirst()offerFirst()addLast()add()offerLast()
removeFirst()
: 덱의 앞쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 예외가 발생한다.
pollFirst()
: 덱의 앞쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 null이 리턴된다.
removeLast()
: 덱의 마지막 쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 예외가 발생한다.
pollLast()
: 덱의 마지막 쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 null이 리턴된다.
remove()
: removeFirst()와 동일
poll()
: pollFirst와 동일

getFirst()
: 덱의 앞쪽 엘리먼트 하나를 제거하지 않은 채 리턴한다. 덱이 비어있으면 예외가 발생한다.
peekFirst()
: 덱의 앞쪽 엘리먼트 하나를 제거하지 않은 채 리턴한다. 덱이 비어있으면 null이 리턴된다.
getLast()
: 덱의 마지막쪽 엘리먼트 하나를 제거하지 않은 채 리턴한다. 덱이 비어있으면 예외가 발생한다.
peekLast()
: 덱의 마지막 엘리먼트 하나를 제거하지 않은 채 리턴한다. 덱이 비어있으면 null이 리턴된다.
peek()
: peekFirst()와 동일
removeLastOccurrence(Object o)
: 덱의 뒤쪽에서부터 탐색하여 입력한 Object o와 동일한 첫 엘리먼트를 제거한다. Object o와 같은 엘리먼트가 없으면 덱에 변경이 발생하지 않는다.
element()
: removeFirst()와 동일
addAll(Collection <? extends E c)
: 입력 받은 Collection의 모든 데이터를 덱의 뒤쪽에 삽입한다.
push()
: 덱을 스택으로 사용할 때 쓰임, 스택처럼 요소 추가
pop()
: 덱을 스택으로 사용할 때 쓰임, 맨 위에 있는 요소를 제거하고 반환
remove(Object o)
: removeFirstOccurrence(Object o)와 동일
contain(Object o)
: 덱에 Object o와 동일한 엘리먼트가 포함되어 있는지 확인
size()
: 덱의 크기
iterator()
: 덱의 앞쪽부터 순차적으로 실행되는 이터레이터(iterator)를 얻어옴
descendingIterator()
: 덱의 뒤쪽부터 순차적으로 실행되는 이터레이터를 얻어옴