Java의 Collections는 데이터를 효율적으로 저장, 검색, 조작할 수 있도록 도와주는 자료구조 클래스와 인터페이스들의 집합이다.
자바에서 많이 사용하는 List, Set, Map, Queue 등이 여기에 속한다.
1. Collections(Collections Framework)란?
- Java.util 패키지에 포함되어 있다.
- 데이터를 저장, 정렬, 검색, 수정 등의 작업을 효율적으로 할 수 있도록 설계된 인터페이스 + 구현 클래스들의 모음이야.
2. 주요 인터페이스와 구현체
인터페이스 | 특징 | 주요 구현 클래스 |
List | 순서 O, 중복 허용 | ArrayList, LinkedList, Vector |
Set | 순서 X, 중복 X | HashSet, LinkedHashSet, TreeSet |
Map | 키-값 쌍 저장, 키 중복 X | HashMap, TreeMap, LinkedHashMap |
Queue | FIFO 구조 | LinkedList, PriorityQueue |
3. Collections 클래스의 주요 메서드 정리
메서드 | 설명 |
sort(List<T> list) | 리스트를 오름차순 정렬 (T는 Comparable 구현체여야 함) |
sort(List<T> list, Comparator<? super T> c) | 지정한 비교자(Comparator) 기준으로 정렬 |
reverse(List<T> list) | 리스트의 순서를 역순으로 변경 |
shuffle(List<T> list) | 리스트 요소들의 순서를 무작위로 섞음 |
swap(List<T> list, int i, int j) | 리스트에서 두 요소의 위치를 맞바꿈 |
max(Collection<? extends T> coll) | 컬렉션에서 가장 큰 요소 반환 |
min(Collection<? extends T> coll) | 컬렉션에서 가장 작은 요소 반환 |
binarySearch(List<? extends Comparable<? super T>> list, T key) | 정렬된 리스트에서 이진 탐색으로 요소 위치 찾기 |
fill(List<? super T> list, T obj) | 리스트의 모든 요소를 지정한 값으로 채움 |
copy(List<? super T> dest, List<? extends T> src) | src 리스트 내용을 dest 리스트에 복사 |
replaceAll(List<T> list, T oldVal, T newVal) | 리스트에서 특정 값을 찾아 새 값으로 모두 바꿈 |
frequency(Collection<?> c, Object o) | 컬렉션에서 특정 객체가 몇 번 나오는지 카운트 |
disjoint(Collection<?> c1, Collection<?> c2) | 두 컬렉션이 서로 겹치는 요소가 없는지 확인 |
간단한 예시
import java.util.*;
public class CollectionsExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(4, 2, 9, 1, 5));
Collections.sort(numbers); // [1, 2, 4, 5, 9]
Collections.reverse(numbers); // [9, 5, 4, 2, 1]
Collections.shuffle(numbers); // 무작위 섞기
Collections.swap(numbers, 0, 1); // 첫 번째와 두 번째 요소 교환
int max = Collections.max(numbers);
int min = Collections.min(numbers);
int freq = Collections.frequency(numbers, 4);
System.out.println("Max: " + max);
System.out.println("Min: " + min);
System.out.println("4의 개수: " + freq);
}
}
Collections에 대해 간단하게 알아봤으니 이제는 Arrays에 대해 알아보겠다.
1. Arrays(java.util.Arrays) 클래스란?
- 배열 전용 유틸리티 클래스 혹은 메서드 모음 (정렬, 복사, 비교 등)
- 모든 메서드는 static(정적) → 객체 생성 없이 바로 사용 가능
- java.util 패키지에 포함되어 있다.
2. 자주 사용하는 메서드
메서드 | 설명 |
Arrays.toString(array) | 배열 내용을 문자열로 변환 |
Arrays.sort(array) | 배열 정렬 (오름차순) |
Arrays.copyOf(array, newLength) | 배열을 복사하면서 크기 변경 가능 |
Arrays.equals(arr1, arr2) | 두 배열의 내용이 같은지 비교 |
Arrays.fill(array, value) | 배열을 하나의 값으로 모두 채움 |
Arrays.binarySearch(array, key) | 정렬된 배열에서 이진 탐색 수행 |
Arrays.asList(array) | 배열을 리스트로 변환 (단, 고정 크기) |
Arrays.deepToString(array) | 다차원 배열을 문자열로 변환 |
Arrays.deepEquals(arr1, arr2) | 다차원 배열 내용 비교 |
3. 예시 코드
import java.util.Arrays;
public class ArraysExample {
public static void main(String[] args) {
int[] arr = {3, 5, 1, 2};
Arrays.sort(arr); // 정렬
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 5]
int[] copied = Arrays.copyOf(arr, 6); // 크기 6짜리로 복사
System.out.println(Arrays.toString(copied)); // [1, 2, 3, 5, 0, 0]
Arrays.fill(copied, 4); // 모든 요소를 4로 채움
System.out.println(Arrays.toString(copied)); // [4, 4, 4, 4, 4, 4]
int index = Arrays.binarySearch(arr, 3);
System.out.println("3의 인덱스: " + index); // 2
Integer[] nums = {10, 20, 30};
System.out.println(Arrays.asList(nums)); // [10, 20, 30]
}
}
Arrays와 Collections 차이
똑같이 java.util에 포함되어 있는 자료구조를 다루는 클래스들이지만
Arrays는 Collections에 존재하는 클래스가 아니다.
이는 둘이 다루는 자료구조의 차이 때문이다.
항목 | Arrays(배열) | Collections (ArrayList, HashSet 등) |
크기 | 고정 | 가변 |
요소 추가/삭제 | 불가능 | 가능 |
저장 구조 | 배열 기반 | 다양한 구조 (배열, 연결리스트, 해시 등) |
유연성 | 낮음 | 높음 |
Arrays가 다루는 자료구조인 배열은 크기가 고정되어 있으며 동일한 타입의 요소만 저장할 수 있고.
Collections가 다루는 자료구조들(List, Map, Queue, Set)은 크기가 가변적이며 제네릭스를 사용하여 다양한 타입의 요소를 저장할 수 있다는 차이가 있다.
다만 Arrays.asList()을 사용하여 배열을 리스트로 변환한 경우 Collections의 일부 메서드를 사용할 수 있다.
List<String> list = Arrays.asList("A", "B");
list.sort(); // Arrays의 sort가 아닌 Collections의 sort 이용
list.add("C"); // ❌ UnsupportedOperationException 발생
// 예외가 발생하는 이유는 요소 추가/삭제 불가능한 배열을 가져와서 리스트의 형식으로 가져왔기 때문에
// 자료형이 list로 바뀌었어도 요소 추가/삭제는 안된다고 한다.
이상으로 Arrays와 Collection에 대해 알아보았고 이 둘의 차이점에 대해서도 공부해 보았다.
'공부 > 자바(Java)' 카테고리의 다른 글
Java) Stream API란? (0) | 2025.04.06 |
---|---|
Java) Set이란? (세트 간단 설명, 사용법, 예제) (0) | 2025.04.06 |
Java) Queue란? (큐 간단 설명, 사용법, 예제) (3) | 2025.04.05 |
Java) Stack이란? (간단 설명, 사용법, 예시) (0) | 2025.04.05 |
Java) List란? (ArrayList, LinkedList, Vector 설명, 사용법, 예시) (0) | 2025.04.05 |