본문 바로가기

Java & Spring

[JAVA] - 데크 (Deque)

데크 (Deque)

스택 (Stack)과 큐 (Queue)를 합친 형태로 양쪽에서 삽입과 삭제가 모두 가능한 자료구조이다.

(Deque : Doubly-ended Queue)

데이터를 앞쪽에 넣고 뒤쪽에서 빼면 큐 (Queue), 데이터를 앞쪽에 넣고 앞쪽에서 빼면 스택 (Stack)과 같다.

데크에서 한쪽의 입출력을 제한할 수 있는데, 한쪽의 입력을 제한한 데크를 입력제한 데크 (Scroll)라고 하며,

한쪽의 출력을 제한한 데크를 출력제한 데크 (Shelf)라고 한다.

 

 

데크 공간 : 데이터가 존재할 수 있는 공간

front : 데크 공간의 맨 앞부분

rear : 데크 공간의 맨 마지막 부분

 

데크 (Deque) 사용법 및 주요 메서드

 

import java.util.ArrayDeque;
import java.util.Deque;

Deque<Integer> deque = new ArrayDeque<>();	// int형 deque 선언

 

위와 같이 Deque 클래스를 import 해준 뒤에, 사용할 수 있다.

 

우측항을 보면 ArrayDeque 클래스로 선언해 줬는데. Deque는 인터페이스로 구현되어 있어 큐 (Queue)처럼 바로 객체를 생성할 수 없다. (인터페이스나 추상클래스는 참조되는 메소드들은 오버라이딩해서 구현한 뒤에 사용할 수 있기 때문)

 

따라서, Deque의 연산이 구현되어 있는 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스를 사용하여 간편하게 사용할 수 있다.

 

① add(), offer()

    데크에 데이터를 삽입해 준다.

    add(offer)First() : front 쪽으로 데이터 삽입

    add(offer)Last(), add(), offer() : rear 쪽으로 데이터 삽입

 

// front쪽에 데이터 삽입
deque.addFirst(1);
deque.offerFirst(2);
deque.addFirst(3);

// rear쪽에 데이터 삽입
deque.addLast(10);
deque.offerLast(20);
deque.addLast(30);

 

 

데크에 데이터가 꽉 차있을 때 add 명령을 진행하면 예외가 발생하고, offer 명령을 진행하면 null을 반환한다.

예외 발생 시 : 예외 처리 / null 반환 시 : 반환 처리

 

② remove(), poll()

    데크에 데이터를 제거해 준다.

    remove(poll)First(), remove(), poll() : front쪽으로 데이터 제거

    remove(poll)Last() : rear쪽으로 데이터 제거

 

// front 데이터 제거
deque.removeFirst();
deque.pollFirst();

// rear 데이터 제거
deque.removeLast();
deque.pollLast();

 

 

데크에 데이터가 비어있을 때 remove 명령을 진행하면 예외가 발생하고, poll 명령을 진행하면 null을 반환한다.

예외 발생 시 : 예외 처리 / null 반환 시 : 반환 처리

 

③ get(), peek()

    데크의 특정 값을 조회한다.

    getFirst() : 첫 번째 데이터를 조회한다. 비어있으면 예외 발생 

    peekFirst() : 첫 번째 데이터를 조회한다. 비어있으면 null 반환

    getLast() : 마지막 데이터를 조회한다. 비어있으면 예외 발생

    peekLast() : 마지막 데이터를 조회한다. 비어있으면 null 반환

 

// 첫 번째 데이터 조회
deque.getFirst());
deque.peekFirst());

// 마지막 데이터 조회
deque.getLast());
deque.peekLast());

 

 

추가로, for문을 통해 Deque의 데이터를 front부터 rear까지 순회할 수 있다.

 

for (int num : deque) {	// deque의 첫 번째 데이터부터 마지막까지 순회
	System.out.print(i + " ");	// 순회한 데이터 출력
    }

 

'Java & Spring' 카테고리의 다른 글

이진 탐색 트리  (0) 2023.04.20
[JAVA] - 힙 (Heap)  (0) 2023.04.18
[JAVA] - 큐 (Queue)  (0) 2023.04.11
[JAVA] - 스택(Stack)  (0) 2023.04.10
[JAVA] - 문자열 String 타입  (0) 2023.04.09