[Java 심화] Collections와 Arrays - 배열과 컬렉션을 효율적으로 다루는 Method 정리

Kyung Jae, Cheong·2024년 10월 12일
0
post-thumbnail

Collections와 Arrays

  • 이번 포스팅에서는 CollectionsArrays 클래스의 주요 메서드들을 정리하고, 이러한 메서드들이 실제로 어떻게 활용되는지 살펴보도록 하겠습니다.
    • 또한, 배열과 컬렉션 간의 변환과 관련된 효율적인 처리 방법도 함께 다룰 것입니다.
  • Java는 다양한 데이터 구조를 효율적으로 다룰 수 있는 강력한 메서드들을 제공하는데, 그 중 Collections 클래스와 Arrays 클래스는 배열과 컬렉션을 다루는 데 있어 상당히 유용한 도구입니다.
    • Collections 클래스는 컬렉션 데이터를 정렬하거나 검색, 병합, 변환하는 다양한 유틸리티 메서드를 제공하며, 복잡한 자료구조 작업을 간결하게 처리할 수 있게 해줍니다.
    • Arrays 클래스는 배열을 정렬하거나 복사, 비교하는 작업을 효과적으로 수행할 수 있는 메서드들을 제공합니다.

1. Arrays

  • Arrays 클래스는 배열을 효과적으로 다루기 위한 다양한 메서드를 제공하는 유틸리티 클래스입니다.
  • Java에서 배열은 고정된 크기의 자료구조로, 인덱스를 통해 데이터에 빠르게 접근할 수 있는 장점이 있지만, 크기 변경이나 삽입/삭제와 같은 작업에서는 다소 불편할 수 있습니다.
    • 이러한 제한을 보완하기 위해 Arrays 클래스는 배열을 정렬, 복사, 비교, 변환하는 다양한 메서드를 제공합니다.
    • 이를 통해 배열의 유연성과 성능을 극대화할 수 있습니다.

배열과 컬렉션의 차이점

  • 배열은 고정된 크기를 가지므로 초기화 이후에는 크기를 변경할 수 없습니다. 반면 컬렉션은 동적으로 크기를 조정할 수 있으며, 더 유연한 데이터를 다루는 구조입니다.
    • 배열은 메모리 효율이 뛰어나고, 인덱스를 통해 빠르게 접근할 수 있지만, 크기를 늘리거나 줄이는 작업에는 불편함이 따릅니다.
    • 컬렉션은 이와 달리 메모리 상에서 동적으로 크기가 조정되어 더 유연하게 데이터 관리가 가능합니다.
    • Arrays 클래스의 메서드를 사용하면 배열의 이러한 제한을 극복할 수 있는 다양한 작업들을 손쉽게 처리할 수 있습니다.

Arrays 주요 메서드 기능별 정리

기능메서드 이름설명
배열 정렬sort(array)배열을 오름차순으로 정렬합니다.
parallelSort(array)대용량 배열을 병렬로 정렬하여 성능을 향상시킵니다.
배열 검색binarySearch(array, key)배열에서 이진 탐색을 통해 원하는 값을 검색합니다.
- 주의: 정렬된 배열에서만 사용 가능합니다.
배열 복사copyOf(array, newLength)기존 배열을 복사하여 새로운 크기의 배열을 만듭니다.
copyOfRange(array, from, to)배열의 특정 범위를 복사하여 새로운 배열을 만듭니다.
배열 비교equals(array1, array2)두 배열이 같은지 비교합니다.
mismatch(array1, array2)두 배열이 일치하지 않는 첫 번째 인덱스를 반환합니다.
배열 채우기fill(array, value)배열의 모든 요소를 특정 값으로 채웁니다.
배열 변환asList(array)배열을 List로 변환하여 반환합니다.
toString(array)배열의 내용을 문자열로 변환하여 반환합니다.
  • 배열과 컬렉션 변환: Arrays.asList() 메서드는 배열을 List로 변환할 때 사용됩니다.
    • 다만, 이 메서드는 고정 크기의 List를 반환하기 때문에, 길이가 변동하는 리스트로 변환하고 싶다면 new ArrayList<>(Arrays.asList(array))를 사용해야 합니다.

2. Collections

  • Collections 클래스는 Java에서 제공하는 다양한 컬렉션을 다루기 위한 유틸리티 메서드들을 제공합니다.
    • 이 클래스는 컬렉션 데이터를 정렬, 검색, 변환, 병합하는 데 매우 유용하며, 주로 List, Set, Map과 같은 컬렉션 프레임워크와 함께 사용됩니다.
  • Collections 클래스는 배열과 달리 동적 크기의 컬렉션을 지원하는 유연한 자료구조와 함께 사용될 때 매우 강력합니다.
    • 이 클래스는 복잡한 자료구조 작업을 간결하게 처리할 수 있는 메서드들을 제공합니다.

Collections 주요 메서드 기능별 정리

기능메서드 이름설명
컬렉션 정렬sort(list)주어진 리스트를 오름차순으로 정렬합니다.
reverseOrder()역순(내림차순)으로 정렬하기 위한 Comparator를 반환합니다.
컬렉션 검색binarySearch(list, key)정렬된 리스트에서 이진 탐색을 사용하여 원하는 값을 검색합니다.
(정렬된 리스트에서만 사용 가능)
최댓값/최솟값max(collection)주어진 컬렉션에서 가장 큰 요소를 반환합니다.
min(collection)주어진 컬렉션에서 가장 작은 요소를 반환합니다.
데이터 채우기fill(list, value)주어진 리스트의 모든 요소를 특정 값으로 채웁니다.
데이터 복사copy(destList, srcList)srcList의 모든 요소를 destList로 복사합니다.
두 리스트는 같은 크기여야 합니다.
데이터 병합addAll(collection, elements)주어진 컬렉션에 여러 개의 요소를 한꺼번에 추가합니다.
데이터 회전rotate(list, distance)리스트의 요소들을 지정된 거리만큼 회전시킵니다.
데이터 섞기shuffle(list)주어진 리스트의 요소들을 랜덤하게 섞습니다.
불변 컬렉션unmodifiableList(list)수정할 수 없는 리스트를 반환합니다.
unmodifiableSet(set)수정할 수 없는 Set을 반환합니다.
unmodifiableMap(map)수정할 수 없는 Map을 반환합니다.

Collections 클래스의 주요 특징

  • 정렬 및 검색: Collections.sort()Collections.binarySearch()는 컬렉션에서 데이터를 정렬하고 검색하는 데 매우 유용합니다.
    • 정렬된 컬렉션을 효율적으로 탐색할 수 있는 이진 탐색 메서드는 특히 큰 데이터셋에서 성능을 극대화할 수 있습니다.
  • 데이터 변환 및 복사: fill(), copy(), addAll() 등의 메서드를 사용하여 컬렉션 간의 데이터 변환과 복사 작업을 간단하게 처리할 수 있습니다.
  • 데이터 처리: rotate(), shuffle()과 같은 메서드는 컬렉션의 요소를 회전시키거나 랜덤하게 섞는 작업에 유용합니다.
    • 이는 특정 게임 로직이나 데이터 샘플링 작업에서 자주 사용됩니다.
  • 불변 컬렉션 생성: unmodifiableList(), unmodifiableSet() 등은 컬렉션을 수정할 수 없게 만들어 불변 객체를 만들 때 사용됩니다.
    • 이는 데이터를 보호하거나 불필요한 변경을 방지하고자 할 때 유용합니다.
    • 하지만 정확히는 읽기 전용 뷰를 만드는 것이므로 원본 컬렉션의 요소가 바뀌면 변환된 불변 컬렉션의 요소도 함께 바뀝니다.
    • 이러한 문제는 Java9 이상부터 지원되는 .of() 메서드를 사용하여 해결할 수 있습니다.
      • 그 이전에는 unmodifiableXXX() 메서드로만 불변 컬렉션을 생성할 수 있었습니다.
List<String> immutableList = List.of("a", "b", "c");
Set<String> immutableSet = Set.of("a", "b", "c");
Map<Integer, String> immutableMap = Map.of(1, "one", 2, "two");

추가 메서드 - 동기화된 컬렉션

  • synchronizedXXX() 메서드: Collections 클래스는 멀티스레드 환경에서 안전한 컬렉션을 사용할 수 있도록 synchronizedList(), synchronizedSet(), synchronizedMap() 같은 동기화된 컬렉션을 제공합니다
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());
Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());
  • 이러한 메서드들을 사용하면 동기화된 컬렉션을 쉽게 생성하여 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.
    • 참고로 synchronizedXXX() 메서드로 생성된 컬렉션이 기본적으로는 동기화되지만, 반복(iteration)할 때는 추가로 synchronized 블록으로 감싸야 안전하게 사용할 수 있습니다.

마무리

  • 이번 포스팅에서는 Java에서 배열과 컬렉션을 다루는 데 필수적인 ArraysCollections 클래스의 주요 메서드들을 살펴보았습니다.

    • 각 클래스는 배열과 컬렉션 데이터를 효율적으로 처리할 수 있는 다양한 유틸리티 메서드를 제공하며, 데이터 변환, 정렬, 검색, 복사, 동기화 등 여러 기능을 제공합니다.
  • 배열과 컬렉션의 차이점과 그에 따른 활용 방법을 이해하고, 적절한 상황에서 ArraysCollections의 메서드를 활용하여 코드를 더 간결하고 효율적으로 작성할 수 있습니다.

  • 이러한 메서드들을 적절하게 활용하면 Java에서의 데이터 처리 성능과 코드의 가독성을 크게 향상시킬 수 있습니다.

profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글