LinkedBlockingDeque<E> — 링크드 노드 기반 선택적 제한 블로킹 데크

LinkedBlockingDeque<E> — 링크드 노드 기반 선택적 제한 블로킹 데크

LinkedBlockingDeque<E>는 링크드 노드 기반의 선택적으로 크기를 제한할 수 있는 블로킹 데크(deque) 예요. 선택적인 용량 제한 생성자 인자는 과도한 확장을 막는 방법이 돼요. 용량을 지정하지 않으면 Integer.MAX_VALUE와 같아요. 링크드 노드는 삽입할 때마다 동적으로 생성되는데, 단 데크가 용량을 초과하게 만들지 않는 경우에만 그래요.

출처: Java API Reference

본문

대부분의 연산은 (블로킹에 쓰는 시간을 제외하면) 상수 시간으로 실행돼요. 예외로는 remove, removeFirstOccurrence, removeLastOccurrence, contains, iterator.remove()와 벌크 연산이 있으며, 이들은 모두 선형 시간이에요.

이 클래스와 그 이터레이터는 CollectionIterator 인터페이스의 모든 선택적 메서드를 구현해요. Java Collections Framework의 멤버예요.

생성자

LinkedBlockingDeque()Integer.MAX_VALUE의 용량을 가진 LinkedBlockingDeque를 만들어요.

LinkedBlockingDeque(int capacity) — 주어진 (고정된) 용량을 가진 데크를 만들어요. capacity가 1보다 작으면 IllegalArgumentException을 던져요.

LinkedBlockingDeque(Collection<? extends E> c) — 컬렉션 요소를 이터레이터 순회 순서로 담은 Integer.MAX_VALUE 용량의 데크를 만들어요. 컬렉션이나 요소가 null이면 NullPointerException을 던져요.

양끝 삽입 메서드

void addFirst(E e) / void addLast(E e) — 용량 제한을 위반하지 않고 즉시 삽입해요. 공간이 없으면 IllegalStateException을 던져요. 용량 제한 데크에서는 보통 offerFirst/offerLast가 더 선호돼요.

boolean offerFirst(E e) / boolean offerLast(E e) — 즉시 삽입할 수 있으면 앞/뒤에 넣고 true, 공간이 없으면 false를 반환해요.

void putFirst(E e) throws InterruptedException / void putLast(E e) — 공간이 생길 때까지 필요하면 기다리며 앞/뒤에서 삽입해요.

boolean offerFirst(E e, long timeout, TimeUnit unit) / boolean offerLast(E e, long timeout, TimeUnit unit) — 공간이 생길 때까지 최대 지정 시간만큼 기다리며 삽입해요.

양끝 제거·검색 메서드

E removeFirst() / E removeLast() — 데크의 첫/마지막 요소를 가져와 제거해요. 비어 있으면 NoSuchElementException을 던져요.

E pollFirst() / E pollLast() — 첫/마지막 요소를 가져와 제거하거나 비어 있으면 null을 반환해요.

E takeFirst() / E takeLast() — 필요하면 요소가 생길 때까지 기다리며 첫/마지막 요소를 가져와 제거해요.

E pollFirst(long timeout, TimeUnit unit) / E pollLast(...) — 지정 시간까지 기다리며 첫/마지막 요소를 가져와 제거해요.

E getFirst() / E getLast() — 첫/마지막 요소를 가져오되 제거하지 않아요. 비어 있으면 NoSuchElementException을 던져요.

E peekFirst() / E peekLast() — 첫/마지막 요소를 가져오되 제거하지 않아요. 비어 있으면 null을 반환해요.

boolean removeFirstOccurrence(Object o) / boolean removeLastOccurrence(Object o) — 지정 요소의 첫/마지막 발생을 제거해요.

큐(Queue) 뷰 메서드

boolean add(E e)addLast와 동일해요. boolean offer(E e)offerLast와 동일해요. void put(E e)putLast와 동일해요. boolean offer(E e, long timeout, TimeUnit unit) — 시간 제한 offerLast와 동일해요.

E remove()removeFirst와 동일해요. E poll()pollFirst와 동일해요. E take()takeFirst와 동일해요. E poll(long timeout, TimeUnit unit) — 시간 제한 pollFirst와 동일해요. E element()getFirst와 동일해요. E peek()peekFirst와 동일해요.

int remainingCapacity() — 이 데크가 블로킹 없이 이상적으로 받아들일 수 있는 추가 요소 수를 반환해요. 초기 용량에서 현재 size를 뺀 값과 같아요.

int drainTo(Collection<? super E> c) — 사용 가능한 모든 요소를 제거해 주어진 컬렉션에 추가해요.

int drainTo(Collection<? super E> c, int maxElements) — 최대 지정 개수만큼 요소를 옮겨요.

스택(Stack) 메서드

void push(E e) — 데크 헤드에 요소를 푸시해요. addFirst와 동일해요. 공간이 없으면 IllegalStateException을 던져요.

E pop() — 데크 헤드에서 요소를 팝해요. removeFirst와 동일해요. 비어 있으면 NoSuchElementException을 던져요.

기타 메서드

boolean remove(Object o) — 지정 요소의 첫 발생을 제거해요. removeFirstOccurrence와 동일해요.

int size() — 데크의 요소 수를 반환해요.

boolean contains(Object o) — 지정 요소를 포함하면 true를 반환해요.

boolean addAll(Collection<? extends E> c) — 지정 컬렉션의 모든 요소를 데크 끝에 추가해요. 자기 자신에게 addAll하면 IllegalArgumentException을 던져요.

Object[] toArray() / <T> T[] toArray(T[] a) — 요소를 순서대로 담은 배열을 반환해요.

void clear() — 모든 요소를 원자적으로 제거해요.

Iterator<E> iterator() — 순서대로 순회하는 약하게 일관된 이터레이터를 반환해요.

Iterator<E> descendingIterator() — 역순으로 순회하는 약하게 일관된 이터레이터를 반환해요.

Spliterator<E> spliterator()CONCURRENT, ORDERED, NONNULL을 보고하는 약하게 일관된 Spliterator를 반환해요.

더 알아보기 (Learn more)