[Lecture/Java] 11강 - 컬렉션

김찬미·2025년 5월 29일

11강 - 컬렉션

  • JCF
  • HashSet, ArrayList, LinkedList 클래스
  • HashMap 클래스

JCF

💡 컬렉션
여러 원소하나의 그룹으로 묶어 관리하기 위한 자료구조

JCF란?

JCF (Java Collections Framework)

  • 컬렉션을 표현하고 다루기 위한 통합된 프레임워크
    • 클래스와 인터페이스의 집합
    • 다양한 방식으로 저장, 정렬, 검색, 수정하는 도구 제공
  • 컬렉션을 일관된 방식으로 다룰 수 있음
    • 표준화된 인터페이스: 컬렉션을 다루기 위한 기능 표현
    • 어떻게 표현되는 지와 상관없이 일관성 있게 다룸
    • 클래스: 인터페이스를 구현한 클래스 제공

JCF의 구조

JCF의 인터페이스

  • Set: 순서❌ 중복❌
  • List: 순서⭕ 중복⭕
  • Queue: List와 유사 BUT 선입선출(FIFO) 방식
  • Map: 원소가 <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 비교 정리

항목HashSetArrayListLinkedList
📦 자료 구조해시 테이블 기반동적 배열 (배열 기반)이중 연결 리스트
📑 중복 허용불가✅ 가능✅ 가능
🔢 순서 유지❌ 유지하지 않음✅ 삽입 순서 유지✅ 삽입 순서 유지
📚 사용 목적중복 없는 집합(Set) 구현빠른 접근/검색 위주자주 삽입/삭제 발생 시 적합
🧭 인덱스 접근❌ 불가✅ O(1)❌ 느림 (O(n))

1. 🔸 HashSet

  • Set 인터페이스 구현
  • 중복 허용하지 않음
  • 순서가 중요하지 않은 데이터 집합에 적합
  • 내부적으로 HashMap을 사용
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복 → 저장 안됨

2. 🔸 ArrayList

  • List 인터페이스 구현
  • 중복 허용 · 입력된 순서대로 관리됨
  • 빠른 검색/접근이 필요한 경우 유리
  • 내부적으로 배열 기반 → 크기 조절⭕
List<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());

3. 🔸 LinkedList

  • List + Deque 인터페이스 구현
  • 이중 연결 리스트 구조
  • 중간 삽입/삭제가 많을 때 적합
  • 큐, 스택처럼도 사용 가능 (void 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 인터페이스를 구현한 클래스
→ 자료 탐색 방법이 ArrayListLinkedList 클래스와 다름

복잡한 자료 관리


profile
백엔드 지망 학부생

0개의 댓글