[Java] Deque
Deque, java.util.Deque, Java Deque, double-ended queue, 양방향 큐, 덱
정의
java.util.Deque<E> (Double-Ended Queue) 는 Queue 의 확장 인터페이스. 양쪽 끝 (head, tail) 모두에서 add/remove/examine 가능한 자료구조.
JDK 1.6 도입. Queue, Stack, 일반 List 의 양 끝 연산을 모두 한 인터페이스로 통합.
메서드 매트릭스
| 위치 | insert (throw) | insert (특수값) | remove (throw) | remove (특수값) | examine |
|---|---|---|---|---|---|
| head | addFirst(e) | offerFirst(e) | removeFirst() | pollFirst() | peekFirst() |
| tail | addLast(e) | offerLast(e) | removeLast() | pollLast() | peekLast() |
| Queue (= tail/head) | add(e) | offer(e) | remove() | poll() | peek() |
| Stack (= head) | push(e) | (= addFirst) | pop() | (= removeFirst) | peek() |
push / pop 이 head 쪽에 동작하는 점이 중요. Stack 으로 쓸 때 head 가 top 이 된다.
구현체
| 구현 | 특징 |
|---|---|
| ArrayDeque | 권장 기본, 원형 배열 |
| LinkedList | 양방향 연결 리스트, 메모리 多 |
| ConcurrentLinkedDeque | thread-safe (lock-free) |
LinkedBlockingDeque | thread-safe + blocking |
IMPORTANT
새 코드의 Stack 은 Deque<E> stack = new ArrayDeque<>() 가 권장. 레거시 java.util.Stack 은 Vector 상속이라 비효율적.
// Stack 패턴
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); stack.push(2); stack.push(3);
stack.peek(); // 3
stack.pop(); // 3
// Queue 패턴
Deque<Integer> queue = new ArrayDeque<>();
queue.offer(1); queue.offer(2); queue.offer(3);
queue.peek(); // 1
queue.poll(); // 1
참고
이 글의 용어 (7개)
- [Java] ArrayDequejava
- 정의 는 원형 배열 (circular buffer) 기반의 구현. JDK 1.6 도입. 으로 쓰면 보다 빠르고, 로 쓰면 보다 빠르다. Stack / Queue / Deque 가…
- [Java] Collectionjava
- 정의 는 그룹으로 묶인 객체들을 표현하는 최상위 인터페이스. JCF (Java Collections Framework) 의 입구이자, / / / 모두 이를 확장한다. 자체는 직접…
- [Java] ConcurrentLinkedDequejava
- 정의 는 lock-free . 의 양방향 버전. JDK 1.7 추가. 양 끝 모두에서 add/remove 가능, 모든 연산이 CAS 기반. 내부 구조 이중 연결 리스트 ( , 모…
- [Java] Iterablejava
- 정의 는 루프로 순회 가능한 모든 타입의 최상위 인터페이스. 단 하나의 추상 메서드, 를 정의한다. 인터페이스가 을 extends 하므로 , , , 등 모든 컬렉션이 자동으로 대…
- [Java] LinkedListjava
- 정의 는 양방향 연결 리스트 (doubly linked list) 로 구현된 이자 . 각 원소는 와 포인터를 가진 노드로 보관된다. 와 같은 List 이지만, 메모리 레이아웃과 …
- [Java] Objectjava
- 정의 는 Java 의 모든 클래스의 최상위 부모 (root) 클래스. 가 명시되지 않은 클래스는 컴파일러가 자동으로 를 붙인다. 인터페이스는 클래스가 아니라 를 직접 상속하지는 …
- 큐 (Queue)algorithm
- 정의 큐 (Queue) 는 FIFO (First In, First Out) 순서로 원소를 관리하는 추상 자료구조입니다. (또는 ), (또는 ), 세 연산만 제공하며, 가장 먼저 …
💬 댓글