Java/자바 정리
[Java 컬렉션 핵심 요약] 필수 클래스 개념 + 한 줄 정리로 끝내기
코딩하는냥이
2025. 5. 21. 16:05
반응형
✅ 컬렉션이란?
자바에서 데이터를 효율적으로 저장하고 처리하기 위한 자료 구조의 집합.
List, Set, Map 같은 인터페이스와 이를 구현한 다양한 클래스들이 포함됩니다.
✅ Java 컬렉션 주요 클래스 요약
이름 | 설명 | 주요 특징 | 동기화 | 순서 유지 | 중복 허용 |
ArrayList | 동적 배열 | 빠른 검색, 느린 삽입/삭제 | ❌ | ✅ (인덱스 순) | ✅ |
Vector | 동기화된 ArrayList | ArrayList + Thread-safe | ✅ | ✅ | ✅ |
LinkedList | 양방향 연결 리스트 | 삽입/삭제 빠름, 검색 느림 | ❌ | ✅ | ✅ |
HashSet | 중복 없는 집합 | 순서 없음, 빠른 검색 | ❌ | ❌ | ❌ |
HashMap | 키-값 쌍 저장 | null 키 1개 허용 | ❌ | ❌ | 키 중복 ❌ |
Hashtable | 동기화된 HashMap | null 허용 ❌ | ✅ | ❌ | 키 중복 ❌ |
TreeSet | 정렬된 집합 | 오름차순 정렬 자동 처리 | ❌ | ✅ (정렬 기준) | ❌ |
TreeMap | 정렬된 맵 | 키 기준 정렬됨 | ❌ | ✅ (정렬 기준) | 키 중복 ❌ |
Stack | 후입선출 (LIFO) 구조 | Vector 기반 | ✅ | ✅ | ✅ |
Queue | 선입선출 (FIFO) 구조 | 인터페이스, 다양한 구현체 존재 | 상황에 따라 | ✅ | ✅ |
🔧 간단한 사용법 예시
1. ArrayList
List<String> list = new ArrayList<>();
list.add("A");
list.get(0); // "A"
- 순차적인 데이터 저장과 빠른 인덱스 접근이 필요한 경우 사용.
2. Vector
Vector<Integer> v = new Vector<>();
v.add(10);
v.get(0); // 10
- ArrayList와 유사하지만, 멀티스레드 환경에서 동기화를 보장해야 할 때 사용.
3. LinkedList
LinkedList<String> linked = new LinkedList<>();
linked.add("X");
linked.removeFirst();
- 데이터 삽입/삭제가 빈번한 경우에 유리하며, 큐와 스택처럼도 활용 가능.
4. HashSet
Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 중복 무시
- 중복 없는 데이터를 저장할 때 사용하며, 순서는 신경 쓰지 않을 때 적합.
5. HashMap
Map<String, Integer> map = new HashMap<>();
map.put("key", 100);
map.get("key"); // 100
- 키-값 쌍으로 데이터를 저장하고, 키로 빠르게 값을 찾고 싶을 때 사용.
6. Hashtable
Map<String, Integer> table = new Hashtable<>();
table.put("id", 1);
- HashMap과 같지만 멀티스레드 환경에서 안전하게 사용해야 할 때 사용.
7. TreeSet
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
// 자동 정렬: 1, 3
- 데이터를 자동으로 정렬해서 저장하고 싶을 때 사용.
8. TreeMap
Map<String, String> treeMap = new TreeMap<>();
treeMap.put("b", "B");
treeMap.put("a", "A"); // 정렬: a, b
- 키 값을 기준으로 정렬된 맵이 필요할 때 사용.
9. Stack
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.pop(); // 1
- 후입선출(LIFO) 구조로 데이터를 처리할 때 사용. 되돌리기 기능 등에서 유용.
10. Queue (LinkedList로 구현 예)
Queue<String> queue = new LinkedList<>();
queue.offer("first");
queue.poll(); // "first"
- 선입선출(FIFO) 구조가 필요한 경우 사용. 대기열, 작업 처리 순서 등에 적합.
💡 주요 차이점 요약
- ArrayList vs LinkedList:
- 검색 → ArrayList 빠름
- 삽입/삭제 → LinkedList 빠름
- ArrayList vs Vector:
- Vector는 동기화됨 (멀티스레드 안전하지만 느림)
- HashMap vs Hashtable:
- Hashtable은 동기화되고 null 허용 안 함
- HashMap은 null 키 1개 허용
- HashSet vs TreeSet:
- HashSet은 순서 없음
- TreeSet은 정렬됨
- HashMap vs TreeMap:
- HashMap은 순서 없음
- TreeMap은 키 기준 정렬됨
- Stack vs Queue:
- Stack은 LIFO
- Queue는 FIFO