# **자바 Collections 쉽게 배우기** 자바에서 `Collections Framework`는 **배열보다 더 강력한 자료구조**를 제공한다. 배열은 크기가 고정되지만, 컬렉션은 **동적으로 크기를 조정할 수 있으며, 다양한 데이터 구조**를 제공한다. 컬렉션은 크게 다음과 같은 주요 인터페이스로 구성된다. - `List` : 순서가 있는 자료구조 (배열과 유사, 중복 허용) - `Set` : 중복을 허용하지 않는 자료구조 - `Queue` : FIFO(선입선출) 방식의 자료구조 - `Map` : 키-값 쌍을 저장하는 자료구조 --- ## **1. 주요 컬렉션 클래스 및 메서드 정리** ### **(1) `List` 인터페이스를 구현하는 클래스 (`ArrayList`, `LinkedList`)** | 클래스 | 특징 | |--------|------------------------------| | `ArrayList` | 크기가 동적으로 변하는 배열 | | `LinkedList` | 이중 연결 리스트 구조, 삽입·삭제 빠름 | | 메서드 | 설명 | |--------|------------------------------| | `add(E e)` | 요소 추가 | | `get(int index)` | 특정 위치의 요소 반환 | | `remove(int index)` | 특정 위치의 요소 삭제 | | `size()` | 리스트 크기 반환 | | `contains(Object o)` | 특정 요소 포함 여부 확인 | | `indexOf(Object o)` | 특정 요소의 인덱스 반환 | **예제 코드:** ```java List list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); System.out.println(list.get(0)); // Apple System.out.println(list.contains("Banana")); // true ``` --- ### **(2) `Set` 인터페이스를 구현하는 클래스 (`HashSet`, `TreeSet`)** | 클래스 | 특징 | |--------|------------------------------| | `HashSet` | 중복 없는 요소 저장, 순서 보장 안 됨 | | `TreeSet` | 정렬된 상태 유지 | | 메서드 | 설명 | |--------|------------------------------| | `add(E e)` | 요소 추가 | | `remove(Object o)` | 요소 삭제 | | `contains(Object o)` | 요소 포함 여부 확인 | | `size()` | 크기 반환 | | `clear()` | 모든 요소 제거 | **예제 코드:** ```java Set set = new HashSet<>(); set.add(10); set.add(20); set.add(10); // 중복된 값 추가 X System.out.println(set.size()); // 2 System.out.println(set.contains(20)); // true ``` --- ### **(3) `Queue` 인터페이스를 구현하는 클래스 (`LinkedList`, `PriorityQueue`)** | 클래스 | 특징 | |--------|------------------------------| | `LinkedList` | FIFO(선입선출) 방식으로 동작 | | `PriorityQueue` | 우선순위에 따라 정렬 | | 메서드 | 설명 | |--------|------------------------------| | `offer(E e)` | 요소 추가 (큐의 끝에) | | `poll()` | 첫 번째 요소 반환 후 제거 | | `peek()` | 첫 번째 요소 조회 (삭제 X) | | `isEmpty()` | 큐가 비어 있는지 확인 | **예제 코드:** ```java Queue queue = new LinkedList<>(); queue.offer("A"); queue.offer("B"); System.out.println(queue.poll()); // A (먼저 들어온 요소가 제거됨) System.out.println(queue.peek()); // B (두 번째 요소 조회) ``` --- ### **(4) `Map` 인터페이스를 구현하는 클래스 (`HashMap`, `TreeMap`)** | 클래스 | 특징 | |--------|------------------------------| | `HashMap` | 키-값 쌍 저장, 순서 보장 안 됨 | | `TreeMap` | 키 기준으로 정렬 | | 메서드 | 설명 | |--------|------------------------------| | `put(K key, V value)` | 키-값 추가 | | `get(Object key)` | 키에 해당하는 값 반환 | | `remove(Object key)` | 키에 해당하는 요소 삭제 | | `containsKey(Object key)` | 특정 키 존재 여부 확인 | | `containsValue(Object value)` | 특정 값 존재 여부 확인 | **예제 코드:** ```java Map map = new HashMap<>(); map.put("Apple", 100); map.put("Banana", 200); System.out.println(map.get("Apple")); // 100 System.out.println(map.containsKey("Banana")); // true ``` --- ## **2. `Collections` 유틸리티 클래스** 자바에서는 `java.util.Collections` 클래스를 제공하여 **컬렉션을 조작하는 다양한 기능**을 지원한다. | 메서드 | 설명 | |--------|------------------------------| | `sort(List list)` | 리스트 정렬 | | `reverse(List list)` | 리스트 역순 정렬 | | `shuffle(List list)` | 요소 섞기 | | `max(Collection coll)` | 최대값 반환 | | `min(Collection coll)` | 최소값 반환 | **예제 코드:** ```java List numbers = Arrays.asList(5, 3, 8, 1); Collections.sort(numbers); System.out.println(numbers); // [1, 3, 5, 8] Collections.reverse(numbers); System.out.println(numbers); // [8, 5, 3, 1] ``` --- ## **3. 정리** ✅ **`List`** : 순서가 있는 자료구조 (중복 허용) ✅ **`Set`** : 중복을 허용하지 않는 자료구조 ✅ **`Queue`** : 선입선출(FIFO) 자료구조 ✅ **`Map`** : 키-값 쌍을 저장하는 자료구조 ✅ **`Collections` 유틸리티 클래스**를 활용하면 컬렉션을 더욱 편리하게 조작 가능! 즉, 자바의 컬렉션을 잘 활용하면 **효율적인 데이터 관리와 조작이 가능하다!**