성장일기

Deque(덱/데크)


덱은 Double-Ended Queue의 줄임말로 큐의 양쪽에 데이터를 넣고 뺄 수 있는 형태의 자료구조를 의미한다. 하나의 자료구조에 큐(Queue)와 스택(Stack)을 합쳐 놓은 형태라고 생각하면 된다.

 

이 중에 한쪽으로만 입력이 가능하도록 설정한 덱을 스크롤(Scroll)이라고 하며, 한쪽으로만 출력할 수 있드록 설정한 덱을 셀프(Shelf)라고 한다.

 

 

Deque 생성


Deque<Integer> deque1 = new ArrayDeque<>();
Deque<Integer> deque2 = new LinkedBlockingDeque<>();
Deque<Integer> deque3 = new ConcurrentLinkedDeque<>();
Deque<Integer> deque4 = new LinkedList<>();

 

 

Deque 주요 함수


deque1.addFirst(1);   // 덱의 앞쪽에 데이터 e를 추가
deque1.offerFirst(2;  // 덱의 앞쪽에 데이터 e를 추가
deque1.addLast(3);    // 덱의 뒷쪽에 데이터 e를 추가, add(Element e) 함수와 동일한 기능
deque1.offerLast(4);  // 덱의 뒷쪽에 데이터 e를 추가, offer(Element e) 힘수와 동일한 기능

deque1.removeFirst();    // 덱의 앞쪽의 데이터 삭제, 리턴, remove()함수와 동일한 기능
deque1.removeLast();     // 덱의 뒷쪽의 데이터 삭제, 리턴
deque1.pollFirst();      // 덱의 앞쪽의 데이터 삭제, 리턴, poll() 함수와 동일한 기능
deque1.pollLast();       // 덱의 뒷쪽의 데이터 삭제, 리턴

deque1.getFirst();       // 덱의 앞쪽 데이터를 삭제하지 않고 리턴
deque1.getLast();        // 덱의 뒷쪽 데이터를 삭제하지 않고 리턴
deque1.peekFirst();      // 덱의 앞쪽 데이터를 삭제하지 않고 리턴
deque1.peekLast();       // 덱의 뒷쪽 데이터를 삭제하지 않고 리턴, peek()과 동일한 기능

deque1.size();           // 덱의 크기 리턴

함수들을 보시면, 비슷한 기능들을 가지고 있는 함수들이 있습니다.

add와 offer 함수 같은 경우는 값을 추가한다는 점에서 공통적이지만, add 함수는 용량을 초과하면 예외를 발생시키고, offer 함수 같은 경우는 false를 리턴한다는 점이 다릅니다.

remove 함수와 poll 함수 같은 경우는 값을 삭제한다는 점에서 같지만, 값이 비어있을 때 remove 함수는 예외를 발생시키고, poll 함수는 null을 리턴한다는 점이 다릅니다.

마지막으로 get과 peek 함수의 경우, 덱이 비어있을 때, get은 예외를 발생시키는 반면, peek는 null을 리턴시킨다는 점에서 다릅니다.

 

add/remove/get -> 예외발생

offer/poll/peek -> null return

공유하기

facebook twitter kakaoTalk kakaostory naver band