본문으로 건너뛰기
김신건의 로그

[Java] Deque

· 수정 · 📖 약 1분 · 222자/단어 #java #collection #queue #deque #interface
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
headaddFirst(e)offerFirst(e)removeFirst()pollFirst()peekFirst()
tailaddLast(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양방향 연결 리스트, 메모리 多
ConcurrentLinkedDequethread-safe (lock-free)
LinkedBlockingDequethread-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) 순서로 원소를 관리하는 추상 자료구조입니다. (또는 ), (또는 ), 세 연산만 제공하며, 가장 먼저 …

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기