JCF💡 컬렉션
여러 원소를 하나의 그룹으로 묶어 관리하기 위한 자료구조
JCF란?JCF (Java Collections Framework)
JCF의 구조JCF의 인터페이스
<key, value> 형식, 키는 중복❌❌JCF의 인터페이스와 클래스
java.util패키지에 포함되며 제네릭 타입
→ 다루는 자료의 유형을 지정해야 함

변수 선언은 해당 인터페이스 유형
→ 객체 생성은 인터페이스를 구현하는 클래스를 사용
Set<Integer> set = new HashSet<>();
List<Integer> list = new ArrayList<>();
List<Integer> list = new LinkedList<>();
Queue<Integer> queue = new LinkedList<>();
Map<String, Integer> map = new HashMap<>();
Collection<E> 인터페이스
Set,List,Queue에서 공통으로 지원해야 하는 기능을 정의
| 메서드 | 설명 |
|---|---|
boolean add(E e) | 주어진 요소를 현재 컬렉션에 추가. 성공 시 true 반환 |
boolean addAll(Collection<? extends E> c) | 주어진 컬렉션의 모든 요소를 현재 컬렉션에 추가 |
boolean remove(Object o) | 주어진 요소를 컬렉션에서 제거 |
boolean removeAll(Collection<?> c) | 주어진 컬렉션에 포함된 모든 요소를 현재 컬렉션에서 제거 |
boolean retainAll(Collection<?> c) | 현재 컬렉션의 요소 중, 주어진 컬렉션에 있는 요소만 남김 |
void clear() | 컬렉션의 모든 요소를 제거하여 비움 |
| 메서드 | 설명 |
|---|---|
boolean contains(Object o) | 현재 컬렉션이 주어진 요소를 가지고 있으면 true 반환 |
boolean containsAll(Collection<?> c) | 주어진 컬렉션의 모든 요소가 현재 컬렉션에 있으면 true 반환 |
boolean isEmpty() | 컬렉션이 비어 있으면 true 반환 |
| 메서드 | 설명 |
|---|---|
int size() | 현재 컬렉션에 포함된 요소의 개수를 반환 |
int hashCode() | 현재 컬렉션의 해시 코드값 반환 |
Object[] toArray() | 컬렉션을 객체 배열로 변환하여 반환 |
Iterator<E> iterator() | 컬렉션의 Iterator 객체 반환 |
boolean equals(Object o) | 두 컬렉션이 같은 요소를 같은 순서로 포함하면 true 반환 |
HashSet, ArrayList, LinkedList 클래스HashSet, ArrayList, LinkedList 비교 정리| 항목 | HashSet | ArrayList | LinkedList |
|---|---|---|---|
| 📦 자료 구조 | 해시 테이블 기반 | 동적 배열 (배열 기반) | 이중 연결 리스트 |
| 📑 중복 허용 | ❌ 불가 | ✅ 가능 | ✅ 가능 |
| 🔢 순서 유지 | ❌ 유지하지 않음 | ✅ 삽입 순서 유지 | ✅ 삽입 순서 유지 |
| 📚 사용 목적 | 중복 없는 집합(Set) 구현 | 빠른 접근/검색 위주 | 자주 삽입/삭제 발생 시 적합 |
| 🧭 인덱스 접근 | ❌ 불가 | ✅ O(1) | ❌ 느림 (O(n)) |
HashSetSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복 → 저장 안됨
ArrayListList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.get(0); // 인덱스로 접근 가능
💡
Iterator<E>인터페이스
- 컬렉션에 저장된 원소를 차례대로 다룸
boolean hasNext(),E next(),void remove()- 컬렉션에서 Iterator 객체를 리턴하는
iterator()메소드 사용 가능List<String> list = new ArrayList<String>(); Iterator<String> it = list.iterator(); while (it.hasNext()) System.out.println(it.next());
LinkedListvoid push(), E pop())List<String> linkedList = new LinkedList<>();
linkedList.add("apple");
linkedList.add(1, "banana"); // 중간 삽입 효율적
💡 Queue 인터페이스 구현
boolean offer(E),boolean add(E): 뒤에 원소 추가E poll(),E remove(): 앞의 원소 삭제하고 리턴함E peek(),E element(): 앞의 원소를 읽음
| 상황 | 추천 컬렉션 |
|---|---|
| 중복 제거가 중요할 때 | HashSet |
| 인덱스를 이용한 빠른 접근이 필요할 때 | ArrayList |
| 삽입/삭제가 빈번할 때 | LinkedList |
HashMap 클래스Map<K, V> 인터페이스
(key, value)로 이루어진 원소로 구성되는 컬렉션을 다루기 위한 인터페이스
key는 중복❌key에 하나의 value만 대응됨| 메서드 | 설명 |
|---|---|
V put(K key, V value) | 맵에 <key, value> 쌍을 추가합니다. 이미 존재하는 키라면 값을 덮어씌웁니다. |
V get(Object key) | 해당 키에 매핑된 값을 반환합니다. 키가 없으면 null을 반환합니다. |
V remove(Object key) | 해당 키의 매핑을 제거하고, 그에 대응하는 값을 반환합니다. 키가 없으면 null 반환. |
boolean containsKey(Object key) | 맵에 해당 키가 존재하면 true, 없으면 false를 반환합니다. |
Collection<V> values() | 맵에 저장된 값들로 구성된 컬렉션을 반환합니다. (중복 허용) |
Set<K> keySet() | 맵에 존재하는 모든 키를 Set 형태로 반환합니다. |
HashMap 클래스해싱을 이용하여 Map 인터페이스를 구현한 클래스
→ 자료 탐색 방법이ArrayList나LinkedList클래스와 다름
