[자바] Arrays 클래스

3 분 소요

java.util 패키지

  • 프로그램을 개발하는 데 사용할 수 있는 유용한 유틸리티 클래스가 다수 포함되어 있다.
  • java.lang 패키지 다음으로 가장 많이 사용되는 패키지.
  • import 문을 사용하지 않아도 바로 사용할 수 있는 java.lang 패키지와는 달리, import 문으로 패키지를 불러오고 나서야 사용할 수 있다.

Arrays 클래스

  • 배열을 다루기 위한 다양한 메소드가 포함되어 있다.
  • Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않아도 바로 사용할 수 있다.
  • java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용해야 한다.

binarySearch() 메소드

  • 전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치를 반환.
  • 이진 검색 알고리즘을 사용하므로, 매개변수로 전달되는 배열이 sort() 메소드 등을 사용하여 미리 정렬되어 있어야만 제대로 동작.

    import java.util.*;
      
    public class prog {
      public static void main(String[] args) {
        int[] arr = new int[1000];
        for(int i = 0; i < arr.length; i++) {
          arr[i] = i;
        }
    
        System.out.println(Arrays.binarySearch(arr, 437)); // 437
      }
    }
    

copyOf() 메소드

  • 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사하여 반환.
    • 첫 번째 매개변수원본 배열을 전달받고, 두 번째 매개변수새로운 배열로 복사할 요소의 개수를 전달받는다.
    • 원본 배열과 같은 타입의 복사된 새로운 배열을 반환.
  • 새로운 배열의 길이가 원본 배열보다 길면, 나머지 요소는 배열 요소의 타입에 맞게 다음과 같은 기본값으로 채워진다.

    배열 요소의 타입 기본값
    char ‘\u0000’
    byte, short, int 0
    long 0L
    float 0.0F
    double 0.0 또는 0.0D
    boolean false
    배열, 인스턴스 등 null
    import java.util.*;
      
    public class prog {
        public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = Arrays.copyOf(arr1, 3); // 첫 번째 배열 요소부터 3개의 요소 복사
    
        for(int i = 0; i < arr2.lenght; i++) {
          System.out.print(arr2[i] + " "); // 1 2 3 
        }
        System.out.println();
    
        // 첫 번째 배열 요소부터 10개의 요소 복사 -> 원본 배열의 개수를 초과하여 복사
        int[] arr3 = Arrays.copyOf(arr1, 10);
        for(int i = 0; i < arr3.lenght; i++) {
          System.out.print(arr3[i] + " "); // 1 2 3 4 5 0 0 0 0 0 -> int 타입이므로 0으로 채워짐
        }
      }
    }
    
    • 배열 arr2에는 배열 arr1의 첫 번째 요소부터 3개의 요소를 복사하여 대입.
    • 배열 arr3에는 배열 arr1에서 10개의 요소를 복사하여 대입.
      • 하지만, 배열 arr1의 길이가 5밖에 안되므로, 배열 arr3의 나머지 요소에는 int형의 기본값인 0이 채워진다.

copyOfRange() 메소드

  • 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환.
    • 첫 번째 매개변수로 복사의 대상이 될 원본 배열을 전달받는다.
    • 두 번째 매개변수로 원본 배열에서 복사할 시작 인덱스를 전달받는다.
    • 세 번째 매개변수로 마지막으로 복사될 배열 요소의 바로 다음 인덱스를 전달받는다.
      • 즉, 세 번째 매개변수로 전달된 인덱스 바로 전까지의 배열 요소까지만 복사된다.
    • 원본 배열과 같은 타입의 복사된 새로운 배열을 반환.
    import java.util.*;
    
    public class prog {
      public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
    
        int[] arr2 = Arrays.copyOfRange(arr1, 2, 4);
        for (int i = 0; i < arr2.length; i++) {
          System.out.print(arr2[i] + " "); // 3 4 
        }
      }
    }
    

fill() 메소드

  • 전달받은 배열의 모든 요소를 특정 값으로 초기화해준다.
    • 첫 번째 매개변수로 초기화할 배열을 전달받고, 두 번째 매개변수로 초기값을 전달받는다.
  • 전달받은 원본 배열의 값을 변경한다.

    import java.util.*;
    
    public class prog {
      public static void main(String[] args) {
        int[] arr = new int[10];
    
        Arrays.fill(arr, 7);
        for (int i = 0; i < arr.length; i++) {
          System.out.print(arr[i] + " "); // 7 7 7 7 7 7 7 7 7 7 
        }
      }
    }
    

sort() 메소드

  • 전달받은 배열의 모든 요소를 오름차순으로 정렬.
  • 매개변수로 정렬할 배열을 전달받으며, 전달받은 원본 배열의 순서를 변경한다.

    import java.util.*;
    
    public class prog {
      public static void main(String[] args) {
        int[] arr = {5, 3, 4, 1, 2};
    
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
          System.out.print(arr[i] + " "); // 1 2 3 4 5 
        }
      }
    }
    

그 외 대표적인 Arrays 클래스 메소드

메소드 설명
List asList(T... a) 전달받은 배열을 고정 크기의 리스트(ArrayList, java.util.ArrayList 클래스와는 다른 클래스)로 변환하여 반환
boolean equals(Object[] a, Object[] a2) 전달받은 두 배열이 같은지 확인
  • 💡 java.util.Arrays.ArrayList 클래스는 set(), get(), contains() 메소드를 가지고 있지만, 원소를 추가하는 메소드는 가지고 있지 않기 때문에 사이즈를 바꿀 수 없다.

출처