스택, 큐, 덱 - java.util.ArrayDeque

이현빈·2025년 2월 25일
0

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

0개의 댓글