Arrays 클래스
java.util.Arrays
코딩 테스트를 준비하면서 여러 함수를 쓰기 시작했는데, 수박 겉 핥기처럼 정확히 이해하지 못한 채로 사용한 것 같았다.
그 중 하나로 정렬에 사용한 Arrays 클래스에 대해 정리해보려고 한다.
java.util.Arrays 클래스는 배열을 다루기 위한 메소드들을 포함한다. 이 때 Arrays 클래스의 모든 메소드는 클래스 메소드(static method) 이기 때문에 객체를 생성하지 않고도 바로 사용이 가능하다.
* static method
sort()
전달받은배열의 모든 요소를 오름차순 정렬하는 메소드이다. 매개변수로 배열을 받고, 전달받은 원본 배열의 순서를 변경한다. 이 때 dual-pivot Quicksort 알고리즘을 사용한다. 다음과 같이 사용할 수 있다.
* 정렬 알고리즘
int[] num = {5, 3, 4, 1, 2};
Arrays.sort(num);
for (int i = 0; i < 5; i++) {
System.out.print(arr[i] + " "); // 1 2 3 4 5
}
binarySearch()
전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치를 반환하는 메소드이다. 이진 검색 알고리즘을 사용하므로 전달되는 배열이 미리 정렬되어 있어야 한다.
int[] arr = new int[1000];
for (int i = 0; i < 500; i++) {
arr[i] = i * 2;
}
System.out.println(Arrays.binarySearch(arr, 100)); // 50
copyOf()
전달받은 배열의 특정 길이만큼 새 배열로 복사하여 반환한다. 첫 번째 매개변수로 원본 배열을, 두 번째 매개변수로 새로운 배열로 복사할 요소의 개수를 받는다. 원본 배열과 같은 타입으로 복사되며, 새로운 배열의 길이가 원본 배열보다 길면 나머지 요소는 배열 요소의 타입에 맞는 기본값으로 채워진다.
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 3);
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i] + " "); // 1 2 3
}
System.out.println();
int[] arr3 = Arrays.copyOf(arr1, 10);
for (int i = 0; i < arr3.length; i++) {
System.out.print(arr3[i] + " "); // 1 2 3 4 5 0 0 0 0 0
}
copyOfRange()
전달받은 배열의 특정 범위에 해당하는 요소만을 새 배열로 복사하여 반환한다. 첫 번째 매개변수로 원본 배열을, 두 번째 매개변수로 원본 배열에서 복사를 시작할 인덱스를, 세 번째 매개변수로 마지막으로 복사될 요소의 다음 인덱스를 받는다. 마찬가지로 같은 타입으로 복사된다.
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()
전달받은 배열의 모든 요소를 특정 값으로 초기화한다. 첫 번째 매개변수로 초기화할 배열을, 두 번째 매개변수로 초기값을 받는다. 이 메소드는 원본 배열의 값을 변경한다.
int[] arr = new int[5];
Arrays.fill(arr, 3);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " "); // 3 3 3 3 3
}
기타
이 외에도
statc <T> List<T> asList(T... a) 메소드는 전달받은 배열을 고정 크기의 리스트(list)로 변환하여 반환한다.
static boolean equals(Object[] a, Object[] a2) 메소드는 전달받은 두 배열이 같은지 확인한다.
등의 메소드도 존재한다.
참고
https://www.tcpschool.com/java/java_api_arrays
오타, 지적 감사합니다 :)