Java

컬렉션 클래스 정리 & 요약

1space 2025. 6. 24. 21:53

 

  • List 계열: 순서 O, 중복 O
  • Set 계열: 순서 X (기본), 중복 X
  • Map 계열: Key-Value 쌍으로 저장

그리고 그 안에서도,

  • Hash 기반: 빠른 검색
  • Linked 기반: 순서 유지
  • Tree 기반: 정렬된 순서 유지

 

ArrayList, Vector, Stack – 배열 기반 List

  • 공통점: 내부적으로 배열(Object[])을 사용함 → 빠른 인덱스 접근 가능
  • ArrayList
    • 동기화 ❌ (멀티스레드 환경에선 주의)
    • 삽입/삭제는 느림 (중간에 끼워넣으면 뒤로 밀려남)
    • 가장 일반적인 리스트
  • Vector
    • ArrayList와 동일하지만, 동기화 기능 내장
    • 오래된 클래스 (과거의 자바 프로그램에서 볼 수 있음)
  • Stack
    • Vector를 상속받음
    • LIFO 구조 (후입선출) → push(), pop()

 

LinkedList – 노드 연결 기반 List

  • 내부적으로 노드 구조로 연결되어 있음 (이중 연결 리스트)
  • 삽입, 삭제에 유리
  • 순차 접근은 빠르지만, 인덱스로 접근은 느림
  • List, Queue, Deque 인터페이스 모두 구현함

 

Queue – 선입선출 구조 (FIFO)

  • 일반적으로 LinkedList로 구현
  • 큐의 앞에서 꺼내고 뒤에 넣는 구조
  • 우선순위 큐(PriorityQueue), Deque도 여기에 포함됨

 

HashMap, Hashtable, LinkedHashMap, TreeMap

HashMap

  • 가장 대표적인 Map 클래스
  • Key, Value 형태로 저장
  • null key 허용, null value도 허용
  • 순서 없음
  • 내부적으로 해시 함수와 배열을 이용 → 검색 빠름
  • 단, 동기화❌ → 멀티스레드 환경에서는 주의

Hashtable

  • HashMap과 거의 유사하나, 모든 메서드가 동기화됨
  • null key, value 허용 X
  • 현재는 잘 안 씀 (Legacy)

LinkedHashMap

  • HashMap + 입력 순서 유지
  • 순서대로 반복 가능 (예: for-each 출력 시)

TreeMap

  • 내부적으로 이진 검색 트리(Red-Black Tree) 기반
  • 정렬된 순서로 키를 유지함
  • 검색/범위 검색 성능이 우수함
  • Comparable 또는 Comparator 필요

 

Properties – (String, String) 전용 Map

  • 상속 구조상 Hashtable의 자식
  • 파일에 읽고 쓰기 용도로 자주 사용
  • Java 설정파일이나 API 설정에 많이 쓰임

 

Set 계열: HashSet, LinkedHashSet, TreeSet

HashSet

  • HashMap을 내부적으로 사용
  • 중복 ❌
  • 순서 ❌

LinkedHashSet

  • HashSet + 입력 순서 유지

TreeSet

  • 내부적으로 TreeMap 사용
  • 정렬된 순서 유지
  • 중복 ❌

 

관계 정리

  • List는 중복 허용 + 순서 있음
  • Set은 중복 불가
  • Map은 Key는 중복 불가 / Value는 중복 가능
  • Hash 기반: 빠른 검색
  • Linked 기반: 순서 보장
  • Tree 기반: 정렬된 순서 보장