-
[자료구조] Deque란? from Java자료구조 2024. 4. 27. 15:37
Deque란?
- Double-Ended Queue의 줄임말로 큐의 양쪽에서 데이터를 넣고 뺄 수 있는 형태의 자료구조를 의미한다
- 다시 말해 기존의 Queue는 한쪽에서 데이터를 넣고 다른 한쪽에서 데이터를 빼는 형태인데 Deque는 둘다 데이터를 넣고 뺄 수 있다는 것이다
- Queue와 Stack 을 합쳐 놓은 자료구조라고 생각 하면 된다
Deque 모양 - Deque를 이해하려면 일단 Queue를 알아야 한다
- 아래는 Queue를 정리한 포스팅이다
https://hyeonni.tistory.com/24
Queue란? from java
Queue 란? Queue란? 사전적 의미로는 대기줄이다이러한 사전 적 의미 처럼 queue는 차례대로 처리된다큐는 후입선출(LIFO)인 스택과 다르게 선입선출(FIFO)의 형태를 가진다선입선출 말 그대로 먼저
hyeonni.tistory.com
사용법
Deque 생성
Deque 인터페이스 import java.util.ArrayDeque; import java.util.Deque; import java.util.LinkedList; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.LinkedBlockingDeque; public class test { public static void main(String[] args) { Deque<Integer> deque = new ArrayDeque<>(); Deque<Integer> deque1 = new LinkedList<>(); Deque<Integer> deque2 = new ConcurrentLinkedDeque<>(); Deque<Integer> deque3 = new LinkedBlockingDeque<>(); } }
- Deque는 Queue에 extends 하고 있는 형태이다
- java.util.Deque 클래스로 부터 제공하고 있다
- Deque는 인터페이스로 이를 구현한 구현체로는 ArrayDeque, LinkedList, ConcurrentLinkedDeque, LinkedBlockingDeque가 있다
Deque 값 추가
- 일단 Queue를 알면 add(), offer()는 알거라고 생각하고 이야기 해보겠다
- add(), addLast(), offer(), offerLast()는 데이터를 뒤에서 넣는다
- addFirst(), offerFirst()는 메서드 명 그대로 데이터를 앞에서 넣는다
deque 값 추가 메서드 java docs - add(), addFirst(), addLast()는 데이터를 추가 할때 용량 초과시 IllegalstateException를 던진다
- offer(), offerFirst(), offerLast() 는 데이터를 추가 할때 용량 초과시 false를 반환한다
deque를 스택으로 사용할때 값 추가 메서드 java docs - 위에 메서드는 Deque를 스택으로 쓰일때 값을 추가할때 쓰이는 메서드 이다
- push()는 addFirst()와 동일하게 값을 넣고 만약 용량이 초과시 IllegalStateException을 던진다
Deque 값 제거
- remove(), removeFirst(), poll(), pollFirst()는 데이터를 앞에서 뺀다
- removeLast(), pollLast()는 메서드 명 그대로 데이터를 뒤에서 뺀다
deque 값 제거 메서드 java docs - remove(), removeFirst(), removeLast() 는 데이터 삭제할때 deque가 비어 있으면 NoSuchElementException을 던진다
- poll(), pollFirst(), pollLast() 는 데이터 삭제할때 deque가 비어 있으면 null를 반환한다
deque를 스택으로 사용할때 값 삭제 메서드 java docs - 위에 메서드는 Deque를 스택으로 쓰일때 값을 삭제할때 쓰이는 메서드 이다
- pop()은 removeFirst()와 동일하게 값을 삭제하고 만약 비어있으면 NoSuchElementException을 던진다
Deque값 확인
- getFirst(), peek(), peekFirst() 앞에 있는 데이터를 확인한다
- getLast(), peekLast()는 메서드 명 그대로 뒤에 있는 데이터를 확인한다
deque 값 확인 메서드 java docs - element(), getFirst(), getLast() 는 데이터를 확인 할때 deque가 비어 있으면 NoSuchElementException을 던진다
- peek(), peekFirst(), peekLast() 는 데이터를 확인 할때 deque가 비어 있으면 null를 반환한다
이외의 확인 메서드 java docs - 이외에도 위 그림과 같이 Object 인자와 동일한 엘리먼트가 포함되어 있는지 확인하는 contains()가 있다
이 메서드는 Object의 타입과 이 큐의 타입이 동일하지 않을때 ClassCastException을 던지고
지정된 요소가 null이고 deque가 null 요소를 허용하지 않을때 NullPointerException을 던진다
- 큐의 사이즈를 확인하는 size() 메서드가 있다
Deque 순회
- for문과 iterator를 이용해서 Deque에 저장되어 있는 값들을 순회할 수 있다
// for 문을 이용한 순회 for (int element : deque) { System.out.println(element); } //Iterator를 이용한 순회 Iterator<Integer> integerIterator = deque.iterator(); while (integerIterator.hasNext()) { System.out.println(integerIterator.next()); }
- 위 사진처럼 Deque 클래스에 iterator() 메서드가 있다
- iterator() 메서드는 Iterator로 만들수 있고 descendingIterator()는 역순으로 순회하기 위한 Iterator를 만들수 있는 메서드이다
정리를 하자면..
- 데큐(Deque)는 스택과 큐의 기능을 합쳐놓았다
-Deque를 이용해서 스택기능과 큐 기능을 동시에 사용할 수 있다
'자료구조' 카테고리의 다른 글
[자료구조] 신장 트리 (0) 2024.08.31 [자료구조] 그래프(Graph) (0) 2024.06.10 [자료구조] 힙(Heap) 이란 뭘까? (0) 2024.05.09 [자료구조] Queue의 구현체 (우선순위 큐) (0) 2024.04.28 [자료구조] Queue란? from java (1) 2024.04.27