데크 (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 |