Java

[Java][Tutorial] 3-2. Collections: Queue, Deque, Map

noahkim_ 2023. 10. 15. 18:49

1. Queue Interface

  • Queue는 처리를 위해 요소를 보관하는 컬렉션입니다.
  • 기본적인 Collection 연산 외에도 추가적인 삽입, 삭제, 검사 연산을 제공합니다.

 

기본 연산

요소 추가
  • add(e)
    • 큐의 용량 제한을 위반할 경우 IllegalStateException을 던집니다.
  • offer(e)
    • 용량 제한이 있는 큐에서만 사용하기 위한 것
    • 요소를 삽입하지 못했을 때 false를 반환합니다.

 

 

요소 반환
  • remove(), poll()
  • 큐의 앞쪽 요소를 제거하고 반환합니다.

 

요소 확인
  • element(), peek()
  • 요소를 제거하지 않습니다.

 

특징

정렬
  • 대개 FIFO(First-In-First-Out) 방식으로 요소를 정렬
  • 우선순위 큐는 요소의 값을 기준으로 요소를 정렬합니다.

 

LinkedList
  • Queue를 구현하는 특별한 경우로
  • null 요소를 허용합니다.
    • poll과 peek 메서드에서 특별한 반환 값으로 사용됨
    • 가능하면 null 요소를 추가하는 것은 피하는 것이 좋습니다.

 

Queue
  • 블로킹 큐 메서드 정의 X
  • 블로킹 큐 메서드들은 java.util.concurrent.BlockingQueue 인터페이스에 정의되어 있습니다.

 

2. The Deque Interface

double-ended-queue
  • 양쪽 끝에서 요소의 삽입, 제거, 조회를 지원하는 구조입니다.
  • LIFO(Last-In-First-Out, 스택)와 FIFO(First-In-First-Out, 큐) 방식 모두로 사용할 수 있습니다.
  • 스택과 큐의 동작을 동시에 구현할 수 있습니다.

 

구현체
  • ArrayDeque
  • LinkedList

 

기본 연산

 

삽입
  • addFirst(), offerFirst(): Deque의 시작 부분에 요소를 삽입합니다.
  • addLast(), offerLast(): Deque의 끝 부분에 요소를 삽입합니다.

 

제거
  • removeFirst(), pollFirst(): Deque의 시작 부분에서 요소를 제거합니다.
  • removeLast(), pollLast(): Deque의 끝 부분에서 요소를 제거합니다.

 

조회
  • getFirst(), peekFirst(): Deque의 시작 부분의 요소를 조회합니다.
  • getLast(), peekLast(): Deque의 끝 부분의 요소를 조회합니다.

 

3. Map Interface

  • 고유식별자로 객체를 검색할 수 있는 집합
  • 각 entry는 key-value 형식의 쌍으로 저장

 

연산

기본
  • put (추가)
  • get (검색)
  • remove (삭제)
  • containsKey (특정 키의 존재 여부 확인), containsValue (특정 값의 존재 여부 확인)
  • size (항목 수 얻기), isEmpty (맵이 비어 있는지 확인)

 

대량
  • putAll (한 맵에서 다른 맵으로 모든 매핑 복사)
  • clear (모든 매핑 제거)

 

컬렉션 뷰
  • keySet(): 모든 키의 집합을 반환합니다.
  • values(): 모든 값의 컬렉션을 반환합니다.
  • entrySet(): 모든 키-값 쌍의 집합을 반환합니다.

 

종류

HashMap
  • 순서를 유지하지 않습니다.

 

TreeMap
  • 키를 기반으로 순서를 유지합니다.

 

LinkedHashMap
  • 삽입 순서를 유지합니다.

 

4. Object Ordering

Comparator

  • 객체들의 순서를 정의하고 싶을 때 사용하는 인터페이스입니다.
  • 객체들이 자연스러운 순서(Comparable 인터페이스에 정의된 순서)가 없거나, 다른 순서로 정렬하고 싶을 때 사용

 

compare()
public interface Comparator<T> {
    int compare(T o1, T o2);
}
  • 두 객체를 비교하여 정수를 반환
  • 값이 작을수록 우선순위가 높습니다.
    • 작으면 음수, 같으면 0, 크면 양수
  • 비교하려는 두 객체 중 하나가 Comparator에 적절하지 않은 타입이라면 ClassCastException이 발생합니다.

 

 

 

출처