개발/자바

Collections 클래스

피터JK 2025. 2. 20. 11:02
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 클래스 사용 시 주의점

  1. binarySearch() 사용 시 정렬된 리스트에서만 정상 동작.
  2. synchronizedList(), synchronizedSet(), synchronizedMap()을 사용할 때, 반복문 내에서 동기화 블록을 사용하는 것이 안전.
  3. unmodifiableList(), unmodifiableSet(), unmodifiableMap()을 사용하면 컬렉션이 변경 불가능해지므로, 수정이 필요한 경우 주의.

5. 결론

✔ Collections 클래스는 컬렉션을 조작하는 데 필수적인 유틸리티 메서드를 제공.
✔ 정렬, 탐색, 변경, 동기화 등 다양한 기능을 제공하여 코드의 가독성 및 유지보수성을 높일 수 있음.
✔ 주의할 점을 이해하고 적절하게 활용하면 효율적인 컬렉션 관리 가능! 🚀

728x90