자료구조

ArrayDeque - Java

Stitchhhh 2025. 4. 28. 19:48

ArrayDeque

  • ArrayDeque는 Java에서 제공하는 배열 기반 양방향 큐(Deque) 구현체입니다.
  • LinkedList보다 더 빠르고, Stack과 Queue를 대체할 수 있는 고성능 자료구조입니다.
  • null 요소는 저장할 수 없습니다.

주요 특징

자료구조 배열 기반 (원형 배열)
크기 조정 필요 시 배열을 2배로 확장 (자동 확장)
접근 속도 양 끝에서 빠른 접근 가능 (O(1))
삽입/삭제 속도 front, rear 모두 O(1)
중복 허용 O (같은 값 여러 번 저장 가능)
null 허용 ❌ (null 값 저장 시 NullPointerException)

대표 메서드

package structure.arraydeque;

import java.util.ArrayDeque;

public class ArrayDequeClass {

    private final ArrayDeque<Integer> arrayDeque;

    public ArrayDequeClass(ArrayDeque<Integer> arrayDeque) {
        this.arrayDeque = arrayDeque;
    }

    // 덱의 뒤(rear)에 값을 추가합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null이거나 값이 null인 경우
    public ArrayDeque<Integer> offer(int value) {
        this.arrayDeque.offer(value);
        return this.arrayDeque;
    }

    // 덱의 앞(front)에 값을 추가합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null이거나 값이 null인 경우
    public ArrayDeque<Integer> offerFirst(int value) {
        this.arrayDeque.offerFirst(value);
        return this.arrayDeque;
    }

    // 덱의 뒤(rear)에 값을 추가합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null이거나 값이 null인 경우
    public ArrayDeque<Integer> offerLast(int value) {
        this.arrayDeque.offerLast(value);
        return this.arrayDeque;
    }

    // 덱의 앞(front) 요소를 제거하고 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer poll() {
        return this.arrayDeque.poll();
    }

    // 덱의 앞(front) 요소를 제거하고 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer pollFirst() {
        return this.arrayDeque.pollFirst();
    }

    // 덱의 뒤(rear) 요소를 제거하고 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer pollLast() {
        return this.arrayDeque.pollLast();
    }

    // 덱의 앞(front) 요소를 반환합니다(제거하지 않음).
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer peek() {
        return this.arrayDeque.peek();
    }

    // 덱의 앞(front) 요소를 반환합니다(제거하지 않음).
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer peekFirst() {
        return this.arrayDeque.peekFirst();
    }

    // 덱의 뒤(rear) 요소를 반환합니다(제거하지 않음).
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public Integer peekLast() {
        return this.arrayDeque.peekLast();
    }

    // 덱의 모든 요소를 제거합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public void clear() {
        this.arrayDeque.clear();
    }

    // 덱이 비어 있는지 확인합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public boolean isEmpty() {
        return this.arrayDeque.isEmpty();
    }

    // 덱의 요소 개수를 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public int size() {
        return this.arrayDeque.size();
    }

    // 덱에 지정된 값이 포함되어 있는지 확인합니다.
    // 시간 복잡도: O(n) (덱을 순차적으로 검색)
    // 예외 발생: NullPointerException - arrayDeque가 null인 경우
    public boolean contains(int value) {
        return this.arrayDeque.contains(value);
    }
}

'자료구조' 카테고리의 다른 글

Deque - Java  (0) 2025.04.28
Queue - Java  (0) 2025.04.28
Stack - Java  (0) 2025.04.28
LinkedList - Java  (8) 2025.04.27
ArrayList - Java  (0) 2025.04.27