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