Java: 덱(Deque)의 개념과 사용

Java: 덱(Deque)의 개념과 사용

Double-Ended Queue

큐의 양쪽에 데이터를 넣고 뺄 수 있는 자료구조

큐 또는 스택으로도 사용할 수 있다

덱 의 분류

한 쪽으로만 입력이 가능한 덱 = Scroll

한쪽으로만 출력이 가능한 덱 = Shelf

덱 은 인터페이스

Deque의 자료구조는 interface로 정의되어있다

그렇기에 이를 구현해주는 클래스를 같이 쓰는데

ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList

등이 있다

Java에서의 덱(Double-Ended Queue)

Deque는 입력 출력의 방향이 자유로운 만큼 많은 메소드가 존재한다

클래스 연결

큐와 마찬가지로 2개를 import 해주어야 한다

import java.util.ArrayDeque; import java.util.Deque; public class Main { public static void main(String[] args) { Deque dq = new ArrayDeque<>(); }}

이렇게 연결하면 ArrayDeque 클래스 내부의 메소드를 사용할 수 있다

큐에서의 add와 offer / remove와 poll 형식을 그대로 사용할 수 있다

방향을 기억한다: First = 왼쪽, Last = 오른쪽

개념 큐(Queue) 덱(Deque) push

.offer( 값 ); / .add( 값 ); .offerFirst( 값 ); .offerLast( 값 ); pop

.poll(); / .remove(); .pollFirst( 값 ); .pollLast( 값 ); top .peek(); .peekFirst(); .peekLast(); size .size(); .size(); empty .isEmpty(); .isEmpty(); 검색 후 삭제

First = 왼쪽에서 탐색

Last = 오른쪽에서 탐색 .removeFirstOccurrence( 제거할 값 ); .removeLastOccurrence( 제거할 값 ); .remove( 제거할 값 ); //First와 동일 값이 있는지 확인 .contain( Object o ); 순회 (Iterator)

.iterator(); //iterator로 변환한다 .descendingIterator(); //역순 변환

덱 의 순회

※ 덱에서 클래스 내부에 iterator() 메소드로 iterator 형식의 변환을 할 수 있다

//iterator 연결 Iterator it = dq.iterator(); while(it.hasNext()) { int n = it.next(); System.out.println(n); } //역순으로 iterator 형식 저장 후 연결 Iterator dcit = dq.descendingIterator()(); while(dcit.hasNext()) { int n = dcit.next(); System.out.println(n); } //for문을 통한 순회 for(Integer e : dq) { System.out.println(e); }

from http://devyoseph.tistory.com/99 by ccl(A) rewrite - 2021-10-24 04:28:13