컬렉션, Collection

GOYENA·2025년 3월 27일

1. 컬렉션 프레임워크

컬렉션 프레임워크는 컬렉션 인터페이스와 그 구현 클래스로 구성된다.
기존 배열 기반 시스템의 단점을 보완하며, 데이터를 동적으로 관리할 수 있는 다양한 자료구조를 제공한다.

주요 특징:

  • 배열의 한계: 배열은 크기가 고정되어 크기가 변할 때 비효율적이다.
  • 동적 관리 가능: 컬렉션 프레임워크를 사용하면 데이터를 유연하게 저장하고 처리할 수 있다.

2. 컬렉션 인터페이스

컬렉션 인터페이스는 데이터의 저장, 삭제, 검색 등 기본적인 동작을 정의하는 인터페이스다.
생성자는 없고, 구현 클래스를 통해 구현된다.

주요 컬렉션 인터페이스

1. List

  • 특징: 순서 보장, 인덱스를 통한 접근, 동적 배열
  • 주요 메서드:
    • add(E e): 끝에 요소 추가
    • add(int index, E element): 지정 위치에 요소 추가
    • set(int index, E element): 지정 인덱스 위치에 요소 교체
    • get(int index): 지정 인덱스의 요소 반환
    • remove(Object o): 일치하는 첫 번째 요소 삭제
    • size(): 요소 개수 반환
    • isEmpty(): 비어 있는지 확인

2. Set

  • 특징: 중복 허용하지 않음, 순서 보장하지 않음
  • 주요 메서드:
    • add(element): 요소 추가 (중복 허용 안됨)
    • remove(element): 특정 요소 제거
    • contains(element): 요소 포함 여부 확인
    • size(): 요소 개수 반환

3. Queue (FIFO)

  • 특징: 선입선출
  • 주요 메서드:
    • add(element): 큐에 요소 추가
    • remove(): 큐에서 첫 번째 요소 제거
    • peek(): 첫 번째 요소 반환(제거하지 않음)
    • size(): 큐 요소 개수 반환

4. Map

  • 특징: 키-값 쌍 저장
  • 주요 메서드:
    • put(key, value): 키-값 쌍 추가
    • get(key): 특정 키의 값 반환
    • remove(key): 특정 키-값 쌍 제거
    • containsKey(key): 특정 키 존재 여부 확인
    • size(): 키-값 쌍 개수 반환

3. 구현 클래스

컬렉션 인터페이스를 실제로 구현한 클래스들이다.

1. ArrayList

  • 특징: 동적 배열 기반
  • 장점: 크기 자동 증가
  • 단점: 삽입/삭제가 느림 (특히 중간 삽입)

2. LinkedList

  • 특징: 이중 연결 리스트 기반
  • 장점: 삽입/삭제 빠름
  • 단점: 조회 속도 느림
  • 지원: List, Queue 인터페이스

3. LinkedHashSet

  • 특징: 해시 테이블과 이중 연결 리스트 사용
  • 장점: 중복 없이 삽입 순서 유지

4. HashSet

  • 특징: 순서 예측 불가, 중복 허용하지 않음
  • 장점: 빠른 색인

5. TreeSet

  • 특징: 자동 정렬된 순서로 요소 저장
  • 장점: 중복 제거, 오름차순 정렬
  • 단점: HashSet보다 느림

6. HashMap

  • 특징: 해시 테이블 기반
  • 장점: 키-값 쌍 저장, 빠른 색인
  • 단점: 순서 보장하지 않음

7. TreeMap

  • 특징: 키를 기준으로 정렬된 Map
  • 장점: 자동 정렬된 순서 저장
  • 단점: 성능이 다소 느림

8. Stack

  • 특징: LIFO(후입선출) 순서로 관리
  • 단점: 현재는 Deque 인터페이스나 ArrayDeque, LinkedList로 대체됨

4. 유틸리티 클래스

컬렉션을 보다 효율적으로 다룰 수 있는 다양한 도구들을 제공하는 클래스들이다.


5. 이중 연결 리스트

구조:

  • [이전 포인터 | 데이터 | 다음 포인터] ⇄ [이전 포인터 | 데이터 | 다음 포인터]
  • 양방향 탐색이 가능하고, 리스트의 앞이나 뒤로 쉽게 이동할 수 있다.

장점:

  • 삽입과 삭제 효율성: 특정 위치에서 노드를 삽입하거나 삭제할 때 효율적
  • 메모리 사용: 각 노드는 두 개의 포인터를 가짐
  • 구현 복잡성: 단방향 연결 리스트보다 구현이 복잡함

6. 우선순위 큐

알고리즘에서 많이 사용되며, 큐의 요소들이 우선순위에 따라 처리되는 자료구조.

profile
헤헷

0개의 댓글