자바에는 배열과 컬렉션을 다룰 때 아주 유용한 클래스가 있습니다.
바로 Arrays 클래스와 Collections 클래스입니다.
이 두 클래스는 자바 개발자에게 중요한 존재입니다.
이번 글에서는 두 클래스의 주요 기능을 정리해보겠습니다.
Arrays 클래스
자바에서 배열(int[], String[] 등)은 기본적인 데이터 저장 방식입니다.
하지만 배열은 크기가 고정되어 있고, 편리한 조작 기능이 많지 않습니다.
이런 단점을 보완하기 위해 자바는 java.util.Arrays라는 유틸리티 클래스를 제공합니다.
개념 설명
Arrays 클래스는 배열을 정렬, 복사, 검색, 출력하는 등 다양한 기능을 제공하는 정적(static) 메서드 모음 클래스입니다.
배열을 다룰 때 불편했던 작업들을 간단한 메서드 호출 한 줄로 처리할 수 있게 도와줍니다.
주요 메서드
| 메서드 | 설명 |
| sort() | 배열을 오름차순으로 정렬 |
| copyOf() | 배열을 지정한 길이만큼 복사 |
| binarySearch() | 정렬된 배열에서 이진 탐색으로 값 찾기 |
| toString() | 배열을 문자열 형태로 출력 (디버깅에 유용) |
| equals() | 배열끼리 값이 같은지 비교 |
| fill() | 배열의 모든 값을 동일한 값으로 채움 |
예시 코드
🔷 배열 정렬
import java.util.Arrays;
public class ArraysSortExample {
public static void main(String[] args) {
int[] numbers = {5, 3, 8, 1};
Arrays.sort(numbers); // 오름차순 정렬
System.out.println(Arrays.toString(numbers)); // [1, 3, 5, 8]
}
}
🔷 배열 복사
import java.util.Arrays;
public class ArraysCopyExample {
public static void main(String[] args) {
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5); // 길이 5로 복사
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]
}
}
🔷 이진 탐색 (정렬 필수!)
import java.util.Arrays;
public class ArraysBinarySearchExample {
public static void main(String[] args) {
int[] sorted = {10, 20, 30, 40};
int index = Arrays.binarySearch(sorted, 30);
System.out.println("30의 위치: " + index); // 2
}
}
🔷 배열 비교
import java.util.Arrays;
public class ArraysEqualsExample {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); // true
System.out.println(a == b); // false (주소 비교)
}
}
언제 사용할까요?
- 배열을 정렬하거나 복사할 때
- 배열 안의 값을 빠르게 찾거나 비교할 때
- 배열 상태를 편하게 출력하고 싶을 때 (toString())
주의사항
- binarySearch()는 정렬된 배열에서만 올바른 값을 반환합니다.
- 배열의 길이를 늘리고 싶으면 copyOf()로 새 배열을 만들어야 합니다 (배열은 불변 구조).
- Arrays.sort()는 기본 오름차순 정렬이며, 커스텀 정렬은 Comparator 필요.
요약정리
| 항목 | 내용 |
| 클래스 유형 | 유틸리티 클래스 (java.util.Arrays) |
| 주요 대상 | 배열 (int[], String[], ...) |
| 주요 기능 | 정렬, 복사, 탐색, 출력, 비교 |
| 사용 시점 | 배열을 조작할 때 |
| 특징 | 모든 메서드가 static, 객체 생성 불필요 |
Collections 클래스
배열에는 Arrays 클래스가 있다면,
컬렉션(List, Set, Map)에는 Collections 클래스가 있습니다.
Collections는 자바 컬렉션을 정렬하거나 섞고, 최댓값을 찾고, 동기화 시키는 등 다양한 기능을 제공합니다.
개념 설명
java.util.Collections는 컬렉션 프레임워크(List, Set, Map 등)를 쉽게 조작할 수 있도록 도와주는 유틸리티 클래스입니다.
모든 메서드가 static이므로 객체 생성 없이 바로 사용할 수 있습니다.
주요 메서드
| 메서드 | 설명 |
| sort() | 리스트를 오름차순 정렬 |
| shuffle() | 리스트의 요소 순서를 무작위로 섞음 |
| reverse() | 리스트의 요소 순서를 역순으로 변경 |
| max(), min() | 최대값 / 최소값 찾기 |
| frequency() | 특정 요소가 몇 번 등장하는지 세기 |
| synchronizedXXX() (XXX➡List,Set,Map) | 컬렉션을 쓰레드-safe하게 변환 |
| unmodifiableXXX() (XXX➡List,Set,Map) | 읽기 전용 컬렉션으로 만들어 변경 차단 |
예시 코드
🔷 정렬, 섞기, 뒤집기
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsSortShuffleReverse {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(List.of(3, 1, 4, 1, 5));
Collections.sort(list); // [1, 1, 3, 4, 5]
System.out.println("정렬 후: " + list);
Collections.reverse(list); // [5, 4, 3, 1, 1]
System.out.println("역순 정렬 후: " + list);
Collections.shuffle(list); // [무작위 순서]
System.out.println("셔플 후: " + list);
}
}
🔷 최대값, 빈도수 확인
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsMaxFrequency {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 1, 4, 1));
int max = Collections.max(list);
int count = Collections.frequency(list, 1);
System.out.println("최댓값: " + max); // 4
System.out.println("1의 등장 횟수: " + count); // 3
}
}
🔷 읽기 전용 컬렉션 만들기
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsUnmodifiableExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>(List.of("A", "B"));
List<String> readOnly = Collections.unmodifiableList(names);
System.out.println("읽기 전용 리스트: " + readOnly);
// 아래 코드를 실행하면 예외 발생! (UnsupportedOperationException)
// readOnly.add("C");
}
}
언제 사용할까요?
- 리스트를 정렬하거나 섞거나 뒤집을 때
- 최댓값, 최솟값, 등장 횟수 등 통계가 필요할 때
- 컬렉션을 동기화 처리하거나 읽기 전용으로 만들고 싶을 때
주의사항
- sort()는 List만 가능합니다. Set, Map은 직접 변환해야 정렬 가능
- synchronizedList() 등은 멀티스레드 환경에서만 필요
- unmodifiableList()는 읽기 전용이므로 수정 시 예외 발생
요약정리
| 항목 | 내용 |
| 클래스 유형 | 유틸리티 클래스 (java.util.Collections) |
| 주요 대상 | List, Set, Map 등 컬렉션 |
| 주요 기능 | 정렬, 섞기, 역순, 최대값, 동기화, 읽기 전용 등 |
| 사용 시점 | 컬렉션을 정렬하거나 제어하고 싶을 때 |
| 특징 | static 메서드로 바로 사용 가능, 범용성 높음 |
요약 정리
- 배열을 다룬다면 → Arrays 클래스!
(정렬, 복사, 출력 등 기본 기능을 아주 간단하게 처리 가능) - 컬렉션을 다룬다면 → Collections 클래스!
(정렬, 섞기, 최대값 찾기, 동기화, 불변 컬렉션까지 가능)
비교 표
| 항목 | Arrays 클래스 | Collections 클래스 |
| 대상 | 배열 (int[], String[] 등) | 컬렉션 (List, Set, Map 등) |
| 주요 기능 | 정렬, 복사, 검색, 출력, 비교, 채우기 등 | 정렬, 섞기, 역순, 최대/최소, 동기화, 읽기전용 등 |
| 메서드 유형 | 전부 static | 전부 static |
| 사용 예시 | Arrays.sort(arr), Arrays.copyOf(...) | Collections.sort(list), Collections.shuffle(...) |
| 동기화 지원 | ❌ 지원하지 않음 | ✅ synchronizedList() 등으로 가능 |
| 불변(읽기 전용) 생성 | ❌ 없음 | ✅ unmodifiableList() 등 제공 |
| 문자열 출력 | Arrays.toString(arr) | 직접 순회하거나 .toString() |
| 탐색 기능 | binarySearch() (정렬된 배열만 가능) | 없음 (직접 구현 필요) |
| 정렬 대상 | 기본 배열 (int[], String[]) 등 | List만 가능 (Set, Map은 직접 변환 필요) |
예시 비교 코드
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArraysVsCollectionsExample {
public static void main(String[] args) {
// 배열 정렬
int[] arr = {3, 1, 4};
Arrays.sort(arr);
System.out.println("배열 정렬: " + Arrays.toString(arr)); // [1, 3, 4]
// 리스트 정렬
List<Integer> list = new ArrayList<>(List.of(3, 1, 4));
Collections.sort(list);
System.out.println("리스트 정렬: " + list); // [1, 3, 4]
}
}
읽어주셔서 감사합니다 😊
'프로그래밍 언어 > Java' 카테고리의 다른 글
| [Java] 43. 제네릭스란?(Generics) - 제네릭 클래스와 제네릭 메서드 만들기 (0) | 2025.05.12 |
|---|---|
| [Java] 42. Object란? (0) | 2025.05.09 |
| [Java] 40. 반복자 Iterator란? (Iterator, ListIterator, Enumeration) (0) | 2025.05.08 |
| [Java] 39. Map이란? (HashMap, LinkedHashMap, TreeMap) (1) | 2025.05.07 |
| [Java] 38. Set이란? (HashSet, LinkedHashSet, TreeSet) (0) | 2025.04.30 |
