728x90
✅ 1. Collections 클래스란?
Collections 클래스는 자바 컬렉션을 쉽게 조작할 수 있도록 다양한 유틸리티 메서드를 제공하는 유틸리티 클래스입니다.
- java.util.Collections 패키지에 포함되어 있음.
- Collection 인터페이스(List, Set, Map)의 요소들을 정렬, 검색, 변경하는 다양한 기능을 제공.
- 컬렉션을 동기화(Synchronized) 처리할 수 있는 메서드 포함.
✅ 2. 주요 기능과 메서드 정리
| 기능 | 메서드 | 설명 |
| 정렬 | sort(List<T> list) | 오름차순 정렬 |
| sort(List<T> list, Comparator<? super T> c) | 사용자 정의 정렬 | |
| 검색 | binarySearch(List<T> list, T key) | 이진 탐색 (정렬된 리스트에서 사용) |
| 최댓값/최솟값 | max(Collection<T> coll) | 컬렉션에서 최대값 찾기 |
| min(Collection<T> coll) | 컬렉션에서 최소값 찾기 | |
| 교체 및 변경 | replaceAll(List<T> list, T oldVal, T newVal) | 특정 값 치환 |
| fill(List<? super T> list, T obj) | 모든 요소를 특정 값으로 채움 | |
| 역순 변환 | reverse(List<T> list) | 리스트 요소를 역순으로 변경 |
| 순서 섞기 | shuffle(List<T> list) | 리스트 요소 무작위 섞기 |
| 동기화 처리 | synchronizedList(List<T> list) | 리스트 동기화 |
| synchronizedSet(Set<T> set) | 집합 동기화 | |
| synchronizedMap(Map<K, V> map) | 맵 동기화 | |
| 불변 컬렉션 생성 | unmodifiableList(List<T> list) | 변경 불가능한 리스트 생성 |
| unmodifiableSet(Set<T> set) | 변경 불가능한 집합 생성 | |
| 빈 컬렉션 반환 | emptyList(), emptySet(), emptyMap() | 빈 컬렉션 객체 반환 |
| 싱글톤 컬렉션 생성 | singleton(T o) | 하나의 요소만 포함하는 컬렉션 생성 |
✅ 3. 주요 메서드 예제
📌 (1) sort() - 리스트 정렬
import java.util.*;
public class CollectionsSortExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 2, 9, 1, 3));
// 오름차순 정렬
Collections.sort(numbers);
System.out.println("오름차순 정렬: " + numbers);
// 내림차순 정렬
Collections.sort(numbers, Collections.reverseOrder());
System.out.println("내림차순 정렬: " + numbers);
}
}
✔ 출력
오름차순 정렬: [1, 2, 3, 5, 9]
내림차순 정렬: [9, 5, 3, 2, 1]
📌 (2) binarySearch() - 이진 탐색
🔹 주의: binarySearch는 정렬된 리스트에서만 사용 가능
import java.util.*;
public class CollectionsBinarySearchExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 5, 9);
int index = Collections.binarySearch(numbers, 3);
System.out.println("숫자 3의 위치: " + index);
}
}
✔ 출력
숫자 3의 위치: 2
📌 (3) max() / min() - 최대, 최소값 찾기
import java.util.*;
public class CollectionsMaxMinExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 2, 9, 1, 3);
int max = Collections.max(numbers);
int min = Collections.min(numbers);
System.out.println("최댓값: " + max);
System.out.println("최솟값: " + min);
}
}
✔ 출력
최댓값: 9
최솟값: 1
📌 (4) replaceAll() - 값 변경
import java.util.*;
public class CollectionsReplaceAllExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "apple", "cherry"));
Collections.replaceAll(list, "apple", "grape");
System.out.println("replaceAll 후: " + list);
}
}
✔ 출력
replaceAll 후: [grape, banana, grape, cherry]
📌 (5) reverse() - 역순 변경
import java.util.*;
public class CollectionsReverseExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.reverse(numbers);
System.out.println("역순 리스트: " + numbers);
}
}
✔ 출력
역순 리스트: [5, 4, 3, 2, 1]
📌 (6) shuffle() - 랜덤 섞기
import java.util.*;
public class CollectionsShuffleExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.shuffle(numbers);
System.out.println("셔플된 리스트: " + numbers);
}
}
✔ 출력 (매번 다름)
셔플된 리스트: [3, 5, 1, 4, 2]
📌 (7) synchronizedList() - 동기화 리스트
import java.util.*;
public class CollectionsSynchronizedExample {
public static void main(String[] args) {
List<String> list = Collections.synchronizedList(new ArrayList<>());
list.add("A");
list.add("B");
synchronized (list) { // 동기화 블록 사용
for (String s : list) {
System.out.println(s);
}
}
}
}
✔ 출력
A
B
2025.02.20 - [개발/자바] - Collections : synchronized (list) {} 동기화 블록
Collections : synchronized (list) {} 동기화 블록
✅ 1. 동기화 블록의 필요성자바의 Collections.synchronizedList() 메서드를 사용하면 동기화된 리스트를 만들 수 있습니다.하지만, 반복문 (for-each, Iterator)을 사용할 때는 추가적인 동기화 블록이 필요
piterjk.tistory.com
✅ 4. Collections 클래스 사용 시 주의점
- binarySearch() 사용 시 정렬된 리스트에서만 정상 동작.
- synchronizedList(), synchronizedSet(), synchronizedMap()을 사용할 때, 반복문 내에서 동기화 블록을 사용하는 것이 안전.
- unmodifiableList(), unmodifiableSet(), unmodifiableMap()을 사용하면 컬렉션이 변경 불가능해지므로, 수정이 필요한 경우 주의.
✅ 5. 결론
✔ Collections 클래스는 컬렉션을 조작하는 데 필수적인 유틸리티 메서드를 제공.
✔ 정렬, 탐색, 변경, 동기화 등 다양한 기능을 제공하여 코드의 가독성 및 유지보수성을 높일 수 있음.
✔ 주의할 점을 이해하고 적절하게 활용하면 효율적인 컬렉션 관리 가능! 🚀
728x90
'개발 > 자바' 카테고리의 다른 글
| 자바 제네릭(Generics)의 모든 것: T, E, K, V, N ? 와 다양한 타입 매개변수 활용법 (0) | 2025.02.20 |
|---|---|
| Collections : synchronized (list) {} 동기화 블록 (0) | 2025.02.20 |
| 컬렉션 사용의 필요성 (0) | 2025.02.20 |
| 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점 (0) | 2025.02.20 |
| Java Enum을 활용한 전략 패턴(Strategy Pattern) 구현 (0) | 2025.02.20 |