자바 컬렉션 프레임워크(Java Collection Framework)는 다수의 데이터를 효율적으로 관리하기 위한 표준화된 클래스 집합이다.
인터페이스를 통해 데이터 관리 방식을 추상화하여 코드의 재사용성과 유지보수성을 높인다.
List 인터페이스 (순서 유지, 중복 허용)
- ArrayList: 내부적으로 배열을 사용하여 인덱스 조회가 매우 빠르다.
(O(1)) - LinkedList: 노드 간 연결 구조로 데이터 삽입 및 삭제가 빈번한 경우 유리하다.
(O(1))
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
// 데이터 추가
arrayList.add("Java");
arrayList.add("Python");
// 특정 위치 삽입 (LinkedList가 더 효율적)
linkedList.add(0, "First");
Set 인터페이스 (순서 미보장, 중복 불허)
- HashSet: 해시 테이블을 사용하여 중복을 빠르게 제거한다.
- TreeSet: 이진 탐색 트리 구조로 데이터를 자동 정렬한다.
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.add(10); // 중복 데이터는 무시됨
System.out.println("Size: " + set.size()); // 출력: 2
Map 인터페이스 (Key-Value 쌍)
- HashMap: 키를 기반으로 값을 빠르게 검색한다.
(O(1)) - TreeMap: 키를 기준으로 데이터를 정렬하여 저장한다.
(O(log N))
Map<String, Integer> scores = new HashMap<>();
scores.put("Kim", 90);
scores.put("Lee", 85);
// 키 존재 여부 확인 후 값 획득
if (scores.containsKey("Kim")) {
int score = scores.get("Kim");
}
컬렉션 선택 가이드
| 상황 | 추천 컬렉션 |
| :— | :— |
| 빠른 인덱스 조회 필요 | ArrayList |
| 빈번한 데이터 삽입/삭제 | LinkedList |
| 중복 제거 필요 | HashSet |
| 정렬된 상태 유지 | TreeSet, TreeMap |
| 키-값 쌍 관리 | HashMap |
P.S
컬렉션 프레임워크는 데이터의 특성에 맞는 최적의 자료구조를 제공한다.
각 클래스의 내부 동작 방식과 시간 복잡도를 이해하고 적절한 컬렉션을 선택하는 것이 성능 최적화의 핵심인 것 같다.