Files
java-examples/docs/Collections.md

151 lines
5.0 KiB
Markdown

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