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에 대해 알아보았고 이 둘의 차이점에 대해서도 공부해 보았다.

블로그 이미지

Ahan

책, 영화, 게임! 인생의 활력 요소가 되는 취미들을 하자!

,