1. java.util.ArrayDeque 개괄
- 배열 기반 링 버퍼로 덱 자료구조를 구현
java.util.Stack 기반 스택, java.util.LinkedList 기반 큐보다 실행 속도가 빠름
: 내부 코드에서는 저장 위치에 관계없이 인덱스를 사용해서 덱의 현재 머리/꼬리에 바로 접근 가능하기 때문
(어디까지나 내부 구현 코드에서만 인덱스를 통해 접근할 뿐, ArrayDeque의 public 메서드를 사용하여 덱 자료구조의 특정 위치에 접근하는 것은 불가능함에 유의)
2. java.util.ArrayDeque의 주요 필드
Object[] elements : 덱의 본체가 되는 객체배열
int head : 배열에서 덱의 머리가 되는 위치
int tail : 배열에서 덱의 꼬리가 되는 위치
private static final int MAX_ARRAY_SIZE : (확장 가능한) 덱의 저장 용량
3. java.util.ArrayDeque의 주요 기능
생성자
ArrayDeque()
- 주어진 용량의 초기값만큼의 크기를 갖는 배열 덱을 생성(용량의 초기값은 16)
ArrayDeque(int numElements)
ArrayDeque(Collection c)
- 지정한 컬렉션에 저장된 데이터를 그대로 복사하여 저장한 배열 덱을 생성
데이터 노드 추가
void offerFirst(Object e)
- 덱의 맨 앞에 새로운 데이터를 추가
addFirst()에 의해 구현됨
void addFirst(Object e)
- 덱의 맨 앞에 새로운 데이터를 추가하는 기능에 관한 핵심 코드를 구현한 메서드
- 덱에 더 이상 데이터를 저장하지 못할 경우, 덱의 용량을 기존의 1.5배로 증가시킨 후 저장
- 추가할 데이터를 지정하지 않은 상태에서 이 메서드를 호출할 시 Exception 발생
ArrayDeque 기반 스택 자료구조의 push() 구현에 활용
void offerLast(Object e)
- 덱의 맨 뒤에 새로운 데이터를 추가
addLast()에 의해 구현됨
ArrayDeque 기반 큐 자료구조의 offer() 구현에 활용
void addLast(Object e)
- 덱의 맨 뒤에 새로운 데이터를 추가하는 기능에 관한 핵심 코드를 구현한 메서드
- 더 이상 데이터를 저장하지 못할 경우, 덱의 용량을 기존의 1.5배로 증가시킨 후 저장
- 추가할 데이터를 지정하지 않은 상태에서 이 메서드를 호출할 시 Exception 발생
ArrayDeque 기반 큐 자료구조의 add() 구현에 활용
private void grow()
- 기존 용량이 일정 수준 미만이면 기존 용량에서 +2, 그 이상이면 그 1.5배만큼 용량 증가
데이터 노드 삭제
Object pollFirst()
- 덱의 맨 앞에 저장된 데이터를 삭제하는 기능에 관한 핵심 코드를 구현한 메서드
- 이 메서드의 실행이 종료되면 삭제된 데이터는 반환
- 빈 덱일 때 호출할 경우 Exception의 발생 없이 null을 반환
ArrayDeque 기반 큐 자료구조의 poll() 구현에 활용
Object removeFirst()
pollFirst()에 의해 구현된 메서드
- 빈 덱일 때 이 메서드를 호출할 경우 Exception 발생
ArrayDeque 기반 스택 자료구조의 pop() 구현에 활용
Object pollLast()
- 덱의 맨 뒤에 저장된 데이터를 삭제하는 기능에 관한 핵심 코드를 구현한 메서드
- 이 메서드의 실행이 종료되면 삭제된 데이터는 반환
- 빈 덱일 때 이 메서드를 호출하더라도 Exception 발생 없이 null을 반환
Object removeLast()
pollLast()를 활용하여 구현
- 빈 덱일 때 이 메서드를 호출할 경우 Exception 발생
데이터 노드 조회
Object peekFirst()
- 덱의 맨 앞에 저장된 데이터를 반환하는 기능의 핵심 코드를 구현한 메서드
ArrayDeque 기반 큐/스택 자료구조의 peek() 구현에 활용
- 빈 덱에서 호출할 경우 null을 반환
Object getFirst()
peekFirst()를 활용하여 구현
- 빈 덱에서 호출할 경우 Exception 발생
ArrayDeque 기반 큐 자료구조의 element() 구현에 활용
Object peekLast()
- 덱의 맨 뒤에 저장된 데이터를 반환하는 기능의 핵심 코드를 구현한 메서드
- 빈 덱에서 호출할 경우 null을 반환
Object getLast()
peekLast()를 활용하여 구현
- 빈 덱에서 호출할 경우 Exception 발생
Reference