✅ 자료구조 : 데이터를 저장하는 방식
✅ 선형 자료구조 : 한 종류의 데이터가 선처럼 길게 나열된 자료구조
모든 자료에 O(1)으로 접근이 보장되지 않는 자료구조들
덱은 큐의 양쪽 끝에서 데이터의 삽입과 삭제가 모두 가능하게 만든 큐이다.
간단하게 말해서 스택과 큐의 성질을 모두 가지는 자료구조이다.
double-ended queue의 줄임말이다.
양쪽 끝에서 데이터의 삽입과 삭제를 모두 할 수 있기 때문에 스택과 큐의 연산 모두 구현 가능
addFirst() : 덱의 앞쪽에 데이터 추가. 용량 제한이 있는 덱의 경우 용량을 초과하면 예외가 발생한다.
addLast() : 덱의 마지막에 데이터 추가. 용량 제한이 있는 덱의 경우 용량 초과 시 예외가 발생한다.
offerFirst() : 덱의 앞쪽에 데이터 추가. 정상적으로 추가되면 true, 용량 제한에 걸리는 경우 false 리턴
offerLast() : 덱의 마지막에 데이터 추가. 정상적으로 추가되면 true, 용량 제한에 걸리는 경우 false 리턴
addAll(Collection <? extends E c) : 입력받은 Collection의 모든 데이터를 뒤쪽에 삽입
add() == addLast()
push() == addFirst()
removeFirst() : 덱의 맨 앞에서 데이터를 뽑아 제거한 다음 해당 데이터를 리턴. 덱이 비어있으면 예외가 발생한다.
removeLast() : 덱의 마지막에서 데이터를 뽑아 제거한 다음 해당 데이터를 리턴. 덱이 비어있으면 예외가 발생한다.
pollFirst() : 덱의 맨 앞에서 데이터를 뽑아 제거한 다음 해당 데이터를 리턴. 덱이 비어있으면 null 리턴
pollLast() : 덱의 마지막에서 데이터를 뽑아 제거한 다음 해당 데이터를 리턴. 덱이 비어있으면 null리턴
removeFirstOccrrunce(Object o) : 덱의 앞에서부터 탐색하여 입력한 o와 동일한 첫 엘리먼트를 제거. o와 같은 엘리먼트가 없으면 덱에 변경이 발생하지 않음
removeLastOccrrunce(Object o) : 덱의 뒤에서부터 탐색하여 입력한 o와 동일한 첫 엘리먼트를 제거. o와 같은 엘리먼트가 없으면 덱에 변경이 발생하지 않음
remove() == removeFirst() == element() = pop()
remove(Object o) == removeFirstOccrrunce(Object o)
poll() == pollFirst()
getFirst() : 덱의 앞쪽 엘리먼트 하나를 리턴. 덱이 비어있으면 예외가 발생한다
getLast() : 덱의 맨 뒤쪽 엘리먼트 하나를 리턴. 덱이 비어있으면 예외가 발생한다
peekFirst() :덱의 앞쪽 엘리먼트 하나를 리턴. 덱이 비어있으면 null 반환
peekLast() : 덱의 맨 뒤쪽 엘리먼트 하나를 리턴. 덱이 비어있으면 null 반환
peek() == peekFirst()
contain(Object o) : 덱에 o와 동일한 데이터가 포함되어 있는지 확인
size() : 덱의 크기
iterator() : 덱의 앞쪽부터 순차적으로 실행되는 이터레이터를 얻어옴
descendingIterator() : 덱의 뒤쪽부터 순차적으로 실행되는 이터레이터를 언어 옴
아주 잘 정리해 두셨다.
자바에서 덱은 Deque 인터페이스로 구현되었다.
이를 구현한 ArrayDeque, LinkedBlockingDeque, ConcurrentLinkedDeque, LinkedList 등의 클래스가 있다.
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("Element1");
참고