덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라서 스택(Stack)으로 사용할 수도 있고, 큐(Queue)로도 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(shelf)라고 한다.
Java에서의 Deque
자바에서의 덱은 인터페이스로 구현되었다. 덱 자료구조의 여러 연산들을 정의한 Deque 인터페이스가 있고 이를 구현한 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스가 있다.
addFirst( )
덱의 앞쪽에 엘리먼트를 삽입한다. 용량 제한이 있는 덱의 경우, 용량을 초과하면 예외(Exception)가 발생한다
offerFirst( )
덱의 앞쪽에 엘리먼트를 삽입한다. 정상적으로 엘리먼트가 삽입된 경우 true가 리턴되며, 용량 제한에 걸리는 경우 false를 리턴한다.
addLast( )
덱의 마지막 쪽에 엘리먼트를 삽입한다. 용량 제한이 있는 덱의 경우, 용량 초과시 예외가 발생한다
add( )
addLast()와 동일
offerLast( )
덱의 마지막 쪽에 엘리먼트를 삽입한다. 정상적으로 엘리먼트가 삽입된 경우 true가 리턴되며, 용량 제한에 걸리는 경우 false를 리턴한다.
removeFirst( )
덱의 앞쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 예외가 발생한다.
pollFirst( )
덱의 앞쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 null 이 리턴된다.
removeLast( )
덱의 마지막 쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 예외가 발생한다.
pollLast( )
덱의 마지막 쪽에서 엘리먼트 하나를 뽑아서 제거한 다음 해당 엘리먼트를 리턴한다. 덱이 비어있으면 null 이 리턴된다.
remove( )
removeFirst()와 동일
poll( )
pollFirst()와 동일
getFirst( )
덱의 앞쪽 엘리먼트 하나를 제거하지 않은채 리턴한다. 덱이 비어있으면 예외가 발생한다
peekFirst( )
덱의 앞쪽 엘리먼트 하나를 제거하지 않은채 리턴한다. 덱이 비어있으면 null이 리턴된다.
getLast( )
덱의 마지막쪽 엘리먼트 하나를 제거하지 않은채 리턴한다. 덱이 비어있으면 예외가 발생한다.
peekLast( )
덱의 마지막 엘리먼트 하나를 제거하지 않은 채 리턴한다. 덱이 비어있으면 null이 리턴된다.
peek( )
peekFirst()와 동일
removeFirstOccurrence(Object o)
덱의 앞쪽에서부터 탐색하여 입력한 Object o와 동일한 첫 엘리먼트를 제거한다. Object o 와 같은 엘리먼트가 없으면 덱에 변경이 발생하지 않는다.
removeLastOccurrence(Object o)
덱의 뒤쪽에서부터 탐색하여 입력한 Object o와 동일한 첫 엘리먼트를 제거한다. Object o 와 같은 엘리먼트가 없으면 덱에 변경이 발생하지 않는다.
element( )
removeFirst()와 동일
addAll(Collection <? extends E c)
입력 받은 Collection의 모든 데이터를 덱의 뒤쪽에 삽입한다.
push( )
addFirst()와 동일. 덱을 스택으로 사용할 때 쓰임
pop( )
removeFirst()와 동일. 덱을 스택으로 사용할 때 쓰임
remove(Object o)
removeFirstOccurrence(Object o)와 동일
contain(Object o)
덱에 Object o와 동일한 엘리먼트가 포함되어 있는지 확인
size( )
덱의 크기
iterator( )
덱의 앞쪽부터 순차적으로 실행되는 이터레이터(iterator)를 얻어옴
descendingIterator( )
덱의 뒤쪽부터 순차적으로 실행되는 이터레이터(iterator)를 얻어옴
덱의 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class TestClass {
public static void main(String[] args) throws InterruptedException {
System.out.println("Stack!!");
Deque<String> stack = new ArrayDeque<>();
stack.addFirst("Element1");
stack.addFirst("Element2");
stack.addFirst("Element3");
System.out.println(stack.removeFirst());
System.out.println(stack.removeFirst());
System.out.println(stack.removeFirst());
System.out.println("Queue!!");
Deque<String> queue = new ArrayDeque<>();
queue.addFirst("Element1");
queue.addFirst("Element2");
queue.addFirst("Element3");
System.out.println(queue.removeLast());
System.out.println(queue.removeLast());
System.out.println(queue.removeLast());
}
}
|
cs |
'Language > Java' 카테고리의 다른 글
Java 교집합, 부분집합, 차집합, 합집합 구하기 (1) | 2023.03.24 |
---|---|
Map을 Value값으로 정렬하기 (0) | 2023.03.19 |
멀티캠퍼스 15일차 (완) (0) | 2022.10.31 |
'Do it 자바 프로그래밍 입문' 15장 정리(완) (0) | 2022.10.31 |
멀티캠퍼스 13~14일차 (0) | 2022.10.28 |
댓글