Java/공부
자바 컬렉션 프레임워크 종류와 사용 사례
by wooksss
2025. 1. 23.
자바에는 다양한 컬렉션 프레임워크가 존재한다. 프로젝트를 진행하고 관련 내용을 공부하다 보면 컬렉션이 굉장히 많이 나오지만 무슨 기준으로 해당 컬렉션을 사용했는지 감이 안와서 관련 내용을 찾아봤다.
컬렉션 프레임워크의 주요 인터페이스 및 구현체
컬렉션 프레임워크는 크게 List, Set, Queue, Deque, Map의 다섯 가지 주요 인터페이스로 나눌 수 있다.
List (순서 유지, 중복 허용)
- 요소가 순서를 가지고 있으며, 중복을 허용합니다.
- 사용 상황: 순서가 중요한 데이터, 중복된 데이터 허용.
주요 구현체
ArrayList |
배열 기반, 랜덤 접근이 빠름, 삽입/삭제는 느림 |
데이터가 많고 읽기 위주인 경우 |
LinkedList |
노드 기반, 삽입/삭제가 빠름, 랜덤 접근이 느림 |
데이터 삽입/삭제가 빈번한 경우 |
Vector |
ArrayList와 유사하지만, 동기화 지원 |
멀티스레드 환경에서 동기화 필요 |
Stack |
LIFO 구조 (후입선출) |
수학 계산기, 탐색 알고리즘 |
선택 기준
- 읽기 위주: ArrayList
- 삽입/삭제 빈번: LinkedList
- 동기화 필요: Vector
Set (중복 허용 안 함, 순서 없음)
- 요소가 중복되지 않는 유일한 값이어야 하며, 순서를 보장하지 않음.
- 사용 상황: 중복이 없어야 하고, 순서가 중요하지 않은 데이터.
주요 구현체
HashSet |
해시 테이블 기반, 순서 보장 없음 |
고유값 저장 |
LinkedHashSet |
삽입 순서를 유지하는 HashSet |
순서 보장이 필요한 고유값 저장 |
TreeSet |
정렬된 순서로 저장, NavigableSet 구현 |
정렬된 고유값 저장 |
선택 기준
- 일반적인 고유 데이터: HashSet
- 순서를 유지하며 고유 데이터: LinkedHashSet
- 정렬 필요: TreeSet
Queue (FIFO 구조, 선입선출)
- 순서를 유지하며, FIFO(First In First Out) 방식으로 작동.
- 사용 상황: 작업 대기열, 데이터 처리 순서가 중요한 경우.
주요 구현체
PriorityQueue |
요소를 우선순위로 정렬하여 처리 |
작업 스케줄링 |
LinkedList |
Queue 인터페이스 구현, FIFO 동작 |
일반적인 작업 대기열 |
선택 기준
- 일반 큐: LinkedList
- 우선순위 큐: PriorityQueue
Deque (양방향 큐)
- Double-Ended Queue로, 양쪽 끝에서 삽입/삭제 가능.
- 사용 상황: 스택과 큐를 동시에 지원해야 하는 경우.
주요 구현체
ArrayDeque |
배열 기반, 빠른 성능 |
덱 구현, 스택 대체 |
LinkedList |
노드 기반 |
양방향 데이터 처리 |
선택 기준
- 스택/큐 대체: ArrayDeque
- 일반적인 덱 구현: LinkedList
Map (키-값 쌍으로 저장, 키는 중복 불가)
- 데이터를 키-값 쌍(Key-Value Pair) 형태로 저장.
- 키는 중복 불가, 값은 중복 가능.
- 사용 상황: 키를 기준으로 데이터를 빠르게 검색해야 할 때.
주요 구현체
클래스특징사용 예
HashMap |
해시 테이블 기반, 순서 보장 없음 |
키-값 저장, 빠른 조회 |
LinkedHashMap |
삽입 순서를 유지하는 HashMap |
순서 보장이 필요한 경우 |
TreeMap |
키를 정렬된 순서로 저장 |
정렬된 키-값 쌍 저장 |
Hashtable |
동기화 지원, 성능이 다소 느림 |
멀티스레드 환경 |
선택 기준
- 일반적인 키-값 저장: HashMap
- 순서 보장 필요: LinkedHashMap
- 정렬 필요: TreeMap
- 동기화 필요: Hashtable
선택 가이드
- 순서 필요: ArrayList, LinkedHashSet, LinkedHashMap
- 중복 없는 데이터: HashSet, TreeSet
- 정렬 필요: TreeSet, TreeMap
- 동기화 필요: Vector, Hashtable