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 기반: 정렬된 순서 보장