
배열(Array)로 데이터를 다루다 보면 이런 순간이 옵니다:
"데이터 개수가 매번 달라져..."
"중복 제거하고 싶은데 어떻게 하지?"
"키-값 형태로 저장하고 싶어!"
이럴 때 필요한 게 바로 Java의 Collection Framework

✨ 내가 그린 컬렉션 프렘웤~~~ 너를 위해 그렸지~But you know that it ain't for free~
예 컬렉션 전체 구조가 이렇게 생겼습니다!
Collection 인터페이스 → List, Set, Queue로 나뉨
Map은 따로 존재 (Collection과 별개!)
각각의 구현체는 특성이 다릅니다!
| 구현체 | 특징 |
|---|---|
| ArrayList | 가장 많이 씀, 조회 빠름 |
| LinkedList | 삽입/삭제 빠름 |
| Vector, Stack | 거의 안 씀 (Legacy) |
| 구현체 | 특징 |
|---|---|
| HashSet | 중복 제거, 순서 X |
| LinkedHashSet | 입력 순서 유지 |
| TreeSet | 자동 정렬 (오름차순) |
| 구현체 | 특징 |
|---|---|
| LinkedList | Queue & Deque 둘 다 가능 |
| PriorityQueue | 우선순위대로 꺼냄 |
| 구현체 | 특징 |
|---|---|
| HashMap | 가장 많이 씀, 순서 X |
| LinkedHashMap | 입력 순서 유지 |
| TreeMap | 자동 정렬 (오름차순) |
| 상황 | 추천 컬렉션 | 이유 |
|---|---|---|
| 데이터 추가/삭제 많음 | LinkedList | 연결 구조라 삽입 삭제 빠름 |
| 중복 제거 | HashSet | 중복 불가 특성 |
| 키-값 저장 | HashMap | Map의 대표주자 |
| 정렬된 데이터 필요 | TreeSet / TreeMap | 자동 정렬 |
| 최근 방문 페이지 저장 | Deque | 양방향 삽입/삭제 가능 |
상황 보고 컬렉션 골라보자!
Q1. 회사 사원 정보를 저장하고, 사원 번호로 빠르게 사원 이름을 찾아야 한다.
Q2. 게시글에 달린 태그들 중복 없이 저장하고 싶다. 예시: #자바, #코딩, #자바
Q3. 최근 본 상품을 순서대로 저장하고, 맨 마지막 상품부터 다시 확인하고 싶다 (뒤에서부터 꺼내기).
Q4. 숫자 데이터가 계속 들어오는데, 자동으로 오름차순 정렬되게 저장하고 싶다.
Q5. 학교에 학생 번호가 주어질 때, 번호가 작은 순서대로 학생 정보를 저장하고 출력하고 싶다.
A1. HashMap (빠른 검색 + Key로 검색)
HashMap<Integer, String> employeeMap = new HashMap<>();
employeeMap.put(1001, "홍길동");
employeeMap.put(1002, "김철수");
System.out.println(employeeMap.get(1001)); // 홍길동
A2. HashSet (중복 제거가 핵심)
HashSet<String> tags = new HashSet<>();
tags.add("자바");
tags.add("코딩");
tags.add("자바"); // 중복이라 무시됨
System.out.println(tags); // [자바, 코딩]
A3. Deque (LinkedList 또는 ArrayDeque) (순서대로 저장 + 뒤에서 꺼내기)
Deque<String> recentView = new LinkedList<>();
recentView.add("상품1");
recentView.add("상품2");
recentView.add("상품3");
// 마지막 본 상품부터 확인
System.out.println(recentView.pollLast()); // 상품3
A4. TreeSet (들어오는 순서 상관없이 자동 오름차순 정렬)
TreeSet<Integer> scores = new TreeSet<>();
scores.add(50);
scores.add(20);
scores.add(70);
System.out.println(scores); // [20, 50, 70]
A5. TreeMap (key(학생 번호) 기준 자동 정렬 + 정보 저장)
TreeMap<Integer, String> studentMap = new TreeMap<>();
studentMap.put(3, "김철수");
studentMap.put(1, "홍길동");
studentMap.put(2, "이영희");
System.out.println(studentMap); // {1=홍길동, 2=이영희, 3=김철수}