Deque는 "Double-Ended Queue"의 약자로, 양쪽 끝에서 데이터를 삽입(enqueue)하거나 삭제(dequeue)할 수 있는 선형 자료구조입니다. 즉, 큐와 스택의 성질을 모두 가지고 있으며, 앞(front)과 뒤(rear) 양쪽에서 작업을 처리할 수 있는 유연성을 제공합니다.
addFirst(E element)
: 앞에 데이터 삽입.addLast(E element)
: 뒤에 데이터 삽입.removeFirst()
: 앞에서 데이터 제거 및 반환.removeLast()
: 뒤에서 데이터 제거 및 반환.getFirst()
: 앞의 데이터를 제거하지 않고 반환.getLast()
: 뒤의 데이터를 제거하지 않고 반환.isEmpty()
: Deque가 비어 있는지 확인.size()
: Deque의 크기 반환.Deque는 주로 배열(Array) 또는 연결 리스트(Linked List)를 기반으로 구현됩니다. Java에서는 ArrayDeque
와 LinkedList
로 제공됩니다.
import java.util.Deque;
import java.util.ArrayDeque;
public class DequeExample {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<>();
// 데이터 삽입
deque.addFirst(10); // 앞에 삽입
deque.addLast(20); // 뒤에 삽입
deque.addLast(30);
System.out.println(deque); // 출력: [10, 20, 30]
// 데이터 조회
System.out.println("앞 데이터: " + deque.getFirst()); // 출력: 앞 데이터: 10
System.out.println("뒤 데이터: " + deque.getLast()); // 출력: 뒤 데이터: 30
// 데이터 삭제
deque.removeFirst(); // 앞 데이터 제거
System.out.println(deque); // 출력: [20, 30]
deque.removeLast(); // 뒤 데이터 제거
System.out.println(deque); // 출력: [20]
}
}
import java.util.Deque;
import java.util.ArrayDeque;
public class DequeAsStack {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
// 스택 동작
stack.push(10); // 데이터 삽입
stack.push(20);
stack.push(30);
System.out.println(stack); // 출력: [30, 20, 10]
// 데이터 제거 및 반환
System.out.println(stack.pop()); // 출력: 30
System.out.println(stack); // 출력: [20, 10]
}
}
import java.util.Deque;
import java.util.ArrayDeque;
public class DequeAsQueue {
public static void main(String[] args) {
Deque<Integer> queue = new ArrayDeque<>();
// 큐 동작
queue.addLast(10); // 뒤에 데이터 삽입
queue.addLast(20);
queue.addLast(30);
System.out.println(queue); // 출력: [10, 20, 30]
// 데이터 제거 및 반환
System.out.println(queue.removeFirst()); // 출력: 10
System.out.println(queue); // 출력: [20, 30]
}
}
Deque는 양방향 데이터 처리가 필요한 문제에서 중요한 역할을 하며, Java의 ArrayDeque
는 빠르고 메모리 효율적인 구현을 제공합니다.
추가 학습 자료