| 컬렉션 프레임워크
- 자바에서 데이터를 구조적으로 저장하고 관리학 위한 인터페이스 + 클래스 모음
- 인터페이스로 기능을 정의하고 => 클래스에서 구체적으로 구현한다
| 핵심 인터페이스 구조
Map은 Collection을 상속하지 않는다
※
| 주요 인터페이스 + 대표 구현 클래스
✅ List (순서 O, 중복 O)
구현체 | 특징 |
ArrayList | 배열 기반, 인덱스 접근 빠름 |
LinkedList | 노드 기반, 삽입/삭제 빠름 |
Vector | ArrayList와 유사하지만 동기화됨 |
Stack | Vector 상속, LIFO 구조 |
✅ Set (순서 X, 중복 X)
구현체 | 특징 |
HashSet | 순서 없음, 빠름 |
LinkedHashSet | 입력 순서 유지 |
TreeSet | 자동 정렬 (Comparable or Comparator) |
✅ Queue / Deque
구현체 | 특징 |
LinkedList | List + Queue + Deque 모두 구현 |
PriorityQueue | 우선순위 큐 |
ArrayDeque | 양방향 큐 (Deque), 스택/큐 모두 사용 가능 |
✅ Map (Key-Value 쌍, 중복 Key X)
구현체 | 특징 |
HashMap | 가장 일반적인 Map |
LinkedHashMap | 입력 순서 유지 |
TreeMap | Key 기준 정렬 |
Hashtable | HashMap의 동기화 버전 |
ConcurrentHashMap | 멀티스레드 환경에서 안전 |
✏️ ArrayList vs LinkedList
ArrayList | LinkedList | |
내부 구조 | 배열 기반 | 노드 기반 (연결 리스트) |
장점 | - 인덱스 접근 빠름 - 메모리 덜 씀 |
- 앞/중간 삽입·삭제 빠름 |
단점 | - 중간 삽입·삭제 느림 (뒤 요소를 전부 한 칸씩 밀어야 함) |
- 인덱스 접근 느림 (처음부터 순회해야 함) |
사용 시기 | - 조회가 많을 때 - 리스트 크기가 자주 변하지 않을 때 |
- 삽입/삭제가 많을 때 - 데이터 크기 예측 어려울 때 |
예) 배열처럼 다루는 경우 => ArrayList
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(1));
인덱스로 바로 접근해야 하니까 ArrayList가 빠르다
예) 데이터가 계속 앞에 추가되는 경우 => LinkedList
List<String> log = new LinkedList<>();
log.add(0, "최근로그1");
log.add(0, "최근로그2");
예) 큐를 사용할 때 => LinkedList
Queue<String> queue = new LinkedList<>();
queue.add("A");
queue.poll();
큐는 앞에서 꺼내고 뒤에 넣는 구조라 LinkedList가 유리하다
인덱스로 자주 접근 => ArrayList
앞/중간에 자주 추가/삭제 => LinkedList
큐나 덱처럼 쓰고 싶다 => LinkedList
요소 수가 거의 고정 => ArrayList
읽기만 하고 거의 안 바뀐다 => ArrayList
'IT > JAVA' 카테고리의 다른 글
Java String 클래스 (0) | 2025.04.15 |
---|---|
JMH (JMH 라이브러리를 활용한 Java 코드 성능테스트) (2) | 2025.04.11 |
코드 실행시간 비교 (0) | 2025.03.26 |
HashSet (0) | 2025.03.20 |
Pattern, Matcher Class (0) | 2025.02.25 |