Collections Framework는 객체 그룹을 저장하고 조작하기 위한 Java의 통합된 인터페이스 및 클래스 집합입니다 — List, Set, Map, Queue와 그 구현체들입니다. 미리 만들어지고 잘 테스트된 자료구조를 제공하여 직접 만들 필요가 거의 없게 합니다.
Collection
├── List — 순서 있음, 중복 허용, 인덱스 접근
├── Set — 중복 없음, 고유성 모델링
└── Queue — 처리를 위한 FIFO/우선순위 정렬
Map (별개의 계층) — 키→값 쌍
List<String> list = new ArrayList<>(); // 배열 기반 — 빠른 임의 접근
list.add("a");
list.get(0); // 인덱스 접근 — O(1)
list.contains("a"); // O(n) 검색
// LinkedList — 양 끝에서 빠른 삽입/삭제, O(n) 임의 접근
ArrayList(배열 기반, 빠른 인덱싱)가 기본이며, LinkedList는 끝에 자주 삽입하는 경우에 적합합니다.
Set<String> set = new HashSet<>(); // O(1) add/contains, 순서 없음
set.add("a");
set.add("a"); // 무시됨 — 중복 허용 안 함
set.contains("a"); // O(1) — 멤버십 테스트에 좋음
// TreeSet — 정렬된 순서; LinkedHashSet — 삽입 순서
HashSet은 O(1) 고유성 검사를 제공하고, TreeSet은 요소를 정렬된 상태로 유지합니다.
Map<String, Integer> map = new HashMap<>(); // O(1) get/put, 순서 없음
map.put("age", 30);
map.get("age"); // 30
map.getOrDefault("x", 0); // 기본값을 가진 안전한 접근
map.computeIfAbsent("list", k -> new ArrayList<>()); // 그룹핑에 편리함
// TreeMap — 키로 정렬; LinkedHashMap — 삽입 순서
HashMap은 O(1) 키 기반 조회의 핵심 도구입니다.
순서 + 인덱스 + 중복 필요 → ArrayList
고유성, 빠른 조회 필요 → HashSet
키→값, 빠른 조회 필요 → HashMap
정렬된 순서 필요 → TreeSet / TreeMap
FIFO 처리 필요 → ArrayDeque / LinkedList (Queue)
스레드 안전성 필요 → ConcurrentHashMap 등
ArrayList: get O(1), add-끝 O(1), contains/remove O(n)
HashMap/HashSet: get/put/contains 평균 O(1)
TreeMap/TreeSet: O(log n) (정렬됨)
LinkedList: add/remove-끝 O(1), get O(n)
Collections Framework는 Java에서 가장 많이 사용되는 부분 중 하나입니다 — 거의 모든 프로그램이 이를 사용해 데이터 그룹을 저장하고 처리합니다.
올바른 컬렉션을 선택하는 것은 정확성과 성능에 직접 영향을 미치는 핵심 기술입니다. 순서가 있는 인덱스 데이터에는 ArrayList, 고유성에는 HashSet, 빠른 키 조회에는 HashMap, 그리고 필요할 때 정렬/동시성 변형을 사용합니다.
인터페이스(List/Set/Map/Queue), 그 구현체, 그리고 특히 성능 특성(O(1) HashMap 조회 대 O(n) 리스트 검색)을 이해하면 잘못된 구조를 기본으로 사용하는 대신(느린 코드의 흔한 원인) 적절한 구조를 선택할 수 있습니다.
이는 일상적인 Java 개발을 위한 근본적이고 실무적인 지식입니다.